探索Python作为脚本语言的独特优势与好处:从抽象封装到高级数据结构
我认为,在 Python 的所有特征里,它作为脚本语言是其首要特征。所以,在本系列帖子中,我首先来谈谈 Python 作为脚本语言有哪些好处。

脚本语言好在哪?
聊 Python 作为脚本语言的好处时,首先要讲讲脚本语言本身的优点。通常来讲,当我们提到“脚本语言”,重点在于其解释执行的特性,尽管有些脚本语言也具备编译功能。因此,后面所陈述的这些优点,大多是与编译型语言进行对比的。
更高层次的抽象和封装
大部分脚本语言具备比较高层次的抽象与封装。许多脚本语言内置了字符串处理的能力,像 Perl 就是典型代表,它具备这种能力。并且还有很多脚本语言内置了高级的数据结构。Python 在语言层面对链表(Python 的术语为 List)、映射(Python 的术语为 Dict)、元组(Python 的术语为 Tuple)提供了支持。
Python学习裙:肆捌叁伍肆陆肆壹陆
有了这些高层次的封装后,写代码会变得特别简单且特别爽。例如,在 Python 里,若要将一个 List 翻倍,只需进行这样的操作:[1,2,3] 乘以 2 ,就能得到 [1,2,3,1,2,3] 。
更少的代码量
因为有高层次的封装,所以在达成相同功能的时候,脚本语言的代码量比编译型语言少很多。
比如说,若要打印出某个文本文件的内容。若用 Java 来实现,正常的写法大概需要七行到八行代码(对于把所有代码硬挤到一行的情况,不进行讨论);而用 Python 则只需要三行到五行。
比如说,要抓取给定的 URL 的网页,若用 Python 自带的标准库来实现,大概需要 3 到 5 行代码;然而,要是用 C++来实现的话,代码量就会增加很多,具体需要写多少代码,取决于所使用的 http 库。
代码量减少之后,当你看代码时,无论是看自己的还是看别人的,都能减少很多次翻页键的敲击次数,这样能大大延长键盘的寿命,同时也能降低手指头的劳损。
更好的可读性
当然啦,延长键盘寿命并非关键所在。关键在于,当代码量减少之后,(一般而言)会对提高可读性有所帮助。而可读性恰恰是 Python 的强项之一。
例如:Python 在语法方面强制规定了作用域缩进(这是我很喜爱 Python 的一个方面)。这样的话,就算是新入门的程序员写出的 Python 代码,其缩进风格也会很一致。再看 C 或 C++的新手,他们写出的代码就没有这么规整了。
更平缓的学习曲线
脚本语言的语法通常比较简单,具有傻瓜化的特点。正因如此,入门变得容易了许多。只要稍微有一些编程基础,人们就能够在短时间内掌握并开始使用。
俺手下的 C++程序员和 Java 程序员,还有一些测试人员,他们都能够在一周之内(实际上程序员大概 1、2 天就可以)掌握 Python 的语法,并且能够用它来编写一些辅助性的小工具。这样大大降低了俺培训所耗费的精力。
支持交互式
很多脚本语言的 IDE 具备支持交互式写代码的功能。这意味着,你每写完一行代码,解释器就会执行一次。通过这种方式,能够迅速发现输入错误,同时还可以即刻看到执行结果。
脚本语言有啥缺点?
前面阐述了诸多优点,那脚本语言存在哪些缺点呢?主要的缺点便是性能不佳。这是他们为获得上述优点而付出的较大代价。所幸如今的计算机硬件发展迅速,性能差的这一缺点已经越来越不那么显著了。
Python和其它脚本语言的比较
有同学或许会问,脚本语言的种类繁多,那为什么唯独我偏爱 Python 呢?为了回应这个问题,我将 Python 与一些常见的脚本语言进行一些浅显的对比。
因为后面的内容很容易引发语言上的激烈争论,所以我特此声明:尽管接下来会说到某些语言相较于 python 的不足之处,但我绝对没有贬低这些语言的想法,也不想证明 python 比这些语言更优秀!只是讲述一下我当初是怎样在几种脚本语言中做出选择的?
常见的脚本语言除了 Python 之外还有很多。例如:有 PHP ;有 JavaScript(以下简称 JS);有 Perl;有 VBScript(以下简称 VBS);有 Ruby;有 Bash;有 Lua;有 Tcl(可别误以为是某家电厂商:-)。Python 是怎样从这些脚本语言中脱颖而出的呢?俺挑选的时候,主要考虑了如下几点:
通用性(跨领域)
俺懒得去学太多编程语言。俺希望在熟悉一门脚本语言之后,能够尽可能多地帮俺处理不同领域的事情。从这个角度来看,俺不会选择 PHP,因为它太偏重于 Web 服务端;也不会选择 JS,因为它太偏重于 Web 客户端;更不会选择诸如 Bash 之类的 Shell 脚本,因为它太偏重于系统管理。
Python属于通用的脚本语言,其覆盖范围很广。在 Web 开发领域,Python 可以轻易搞定;在桌面 GUI 应用领域,Python 也可以轻易搞定;在系统管理领域,Python 同样可以轻易搞定;在网络应用领域,Python 依旧可以轻易搞定。
人气够旺
关于“人气”的重要性,我在“如何选择开源项目”这方面进行过介绍。人气较为高且比较流行,就意味着会有更多的资源(像文档以及相关软件等)。当你遇到问题需要去解决的时候,也会有更多的人可以供你咨询。
编程语言的流行程度可以大致参考 TIOBE 的排名,虽然 TIOBE 不能全面反映流行程度,但至少可作为某种参考。
Tcl、PowerShell、Groovy、JavaFX 等这些都在 30 名之外,时间截至到 09 年 8 月,感觉使用的人比较少,所以我暂时不考虑。Python 最近几年的排名一直在上升,请看“这里”,到 09 年 8 月的时候,已经位居排行榜第 6 位。Perl 虽然处于高位,但是最近几年的排名在不断下滑,请看“这里”。俺个人认为,其人气不容乐观。
功能够强、库够丰富
俺很看重的另一个地方是功能的强大程度。在这方面,Python和Perl都较为强悍。对于Python的强悍之处,俺将在后续的帖子“作为瑞士军刀的Python”里进行介绍。
反观 JS 语言,它稍显不足(当然,也有可能是我孤陋寡闻)。反观 Ruby 语言,它稍显不足(当然,也有可能是我孤陋寡闻)。反观 Tcl 语言,它稍显不足(当然,也有可能是我孤陋寡闻)。
跨平台
俺平时会使用不同的操作系统,并且俺负责的产品也是跨平台的。因此,俺对脚本语言有跨平台的要求。在跨平台方面,像 VBS、Bash 这类就不被考虑了。
很多脚本语言都具备跨平台的特性。Python在这方面表现尤为突出。它不仅支持主流的操作系统,也支持一些较为冷门的,像古老的 DOS 系统。同时,它还能支持手持设备,像我的智能手机就可以安装 Python 运行环境。
和其它语言的整合、交互
最后这一点,多数同学可能不会太在意。我因为要在公司的产品里引入脚本技术,所以我得考虑该脚本语言与其他语言的整合能力。整合能力强的脚本语言,能够作为复杂系统中的胶水,把不同模块粘合起来(关于 Glue Language,可查看“这里”)。
至于俺常用的 C++,Python 整合得比 Ruby 好。在 C++社区中非常有名的 Boost 库里面,存在一个 Boost.Python 的子库(可参考“这里”)。关于 Python 怎样被用作胶水,我会在后续的帖子“作为胶合语言的 Python”中详细进行介绍。
总结
基于上述几个方面的考虑,俺最终做出了选择。俺选择了 Python 作为日常使用的脚本工具。俺还把 Python 引入到了公司的产品中,让它充当模块之间的胶合剂。