本章主要内容
- 用Python的理由
- Python的长处
- Python的短板
- 学Python 3的理由
如果想了解Python与其他编程语言的差异,以及它当前的地位,请阅读本章。如果想立即开始学习Python,请略过开头部分,直接跳到第3章。本章内容是本书不可或缺的组成部分,但对于Python编程确实不是必备知识。
1.1 用Python的理由
现在有数百种编程语言可供使用,从成熟的C和C++到Ruby、C#和Lua等新秀,再到Java这样的企业级重器。要选择一门编程语言来学习确实很难。虽然没有一种语言能适合任何场景,但我觉得,对于大量的编程问题来说,Python都算得上是个好选择。如果正在学习编程,Python也是一个不错的选择。目前全球有数十万名程序员都在使用Python,并且用户数每年都在增长。
Python能够持续吸引新用户,是有很多理由的。Python是一款真正的跨平台编程语言,从Windows、Linux/UNIX到Macintosh平台,从超级计算机到手机,它都能很好地运行。Python可以用于开发小型应用程序和快速原型系统,但也能扩展到足以开发大型程序。Python自带了功能强大且易于使用的图形用户界面(GUI)工具包、Web编程库等。而且更重要的是,Python完全免费。
1.2 Python的长处
Python是Guido van Rossum在20世纪90年代研发的一种现代编程语言(以一个著名的喜剧团体命名)。尽管Python并不能完美地适用于所有应用程序的开发,但它的优势使其成为许多情况下的理想选择。
1.2.1 Python易于使用
熟悉传统语言的程序员会发现,Python很容易学习。包含了所有熟悉的结构,如循环、条件语句、数组等,但在Python中很多都更易于使用。原因有以下几点。
- 类型与对象关联,而不是变量。变量可以被赋予任何类型的值,列表也可以包含许多类型的对象。这也意味着通常不需要进行强制类型转换(type casting),代码再也不用受制于预先声明的类型了。
- Python通常可以执行更高级别的抽象操作。有一部分原因是源于Python语言的构建方式,另一部分原因是Python的发行版附带了内容丰富的标准代码库。一个下载网页的程序用两三行代码就可以写完了!
- 语法规则非常简单。虽然成为一名专业的Python高手需要耗费很多时间和精力,但即便是初学者也能快速获取到足够的Python语法并编写出实用的代码。
Python非常适合应用程序的快速开发。用Python编写应用程序的时间可能只有用C或Java的五分之一,并且代码行数只有等效C程序的五分之一,这种情况并不少见。当然,这要视具体的应用场景而定。对于那种大部分是在
for
循环中执行整数运算的数值算法,Python提升的生产力会少得多。对于普通的应用来说,生产力收益可能会比较可观。
1.2.2 Python富有表现力
Python是一种极具表现力的编程语言。这里的“表现力”是指:同样是一行代码,Python可以完成的操作比其他大多数语言都要多。表现力较强的语言,优势十分明显,需要编写的代码越少,项目完成的速度就越快。代码越少,程序就越容易维护和调试。
为了体会一下Python的表现力是如何简化代码的,请考虑交换两个变量
var1
和
var2
的值。在类似Java的语言中,这需要3行代码和1个额外的变量:
int temp = var1;
var1 = var2;
var2 = temp;
在将
var2
的值赋给
var1
时,需要先用变量
temp
暂存
var1
的值,然后再把该暂存值赋给
var2
。这个过程并不是很复杂,但是阅读这3行代码并理解这是为了完成数值交换,是要花些工夫的,即便是有经验的程序员也一样。
相比之下,Python允许在一行代码中完成相同的交换操作,并且从交换方式就能明显看出交换确实发生了:
var2, var1 = var1, var2
当然这只是一个很简单的例子,但类似的优点在Python中俯仰皆是。
1.2.3 Python可读性好
Python的另一个优点是可读性好。也许读者会认为,编程语言只要能被计算机读懂就可以了,但其实人类同样得能读懂。要阅读代码的人,可能是调试人员(很可能就是写程序的人),可能是维护人员(仍然可能是写程序的人),也可能是任何将来修改代码的人。凡此种种,总之代码越容易阅读和理解越好。
代码越容易理解,就越易于调试、维护和修改。Python在这方面的主要优势就是利用缩进。与大多数语言不同,Python坚持要求代码块必须整体缩进。尽管这会让有些人感到奇怪,但好处就是代码总是能以一种非常易懂的风格进行格式化。
以下是两小段程序,一个用Perl编写,另一个用Python编写。两者的操作相同,参数都是两个相同大小的数值列表,返回对其两两求和后的列表。我认为Python代码的可读性比Perl代码更好,看起来更干净,难以理解的符号更少:
# Perl版
sub pairwise_sum {
my($arg1, $arg2) = @_;
my @result;
for(0..$#$arg1) {
push(@result, $arg1->[$_] + $arg2->[$_]);
}
return(\@result);
}
# Python版
def pairwise_sum(list1, list2):
result = []
for i in range(len(list1)):
result.append(list1[i] + list2[i])
return result
上面两段代码完成的工作相同,但Python代码胜在了可读性上。当然,Perl还能有其他的实现方式,其中有一些确实会比以上代码简洁得多,但我认为也更加晦涩难懂。
1.2.4 Python功能齐备
Python的另一个优势是“功能齐备”(batteries included)理念,因其自带了很多函数库。基本思路就是,安装Python后就应该万事俱备,不需要再安装其他库就能真正开始工作了。这就是为什么Python的标准库自带了电子邮件、网页、数据库、操作系统调用、GUI开发等处理模块。
例如,只需要写两行代码,就可以用Python编写一个Web服务器,用于共享某个目录中的文件。
import http.server
http.server.test(HandlerClass=http.server.SimpleHTTPRequestHandler)
无须再安装用于网络连接和HTTP的库,Python都已内置好了,开箱即用。
1.2.5 Python跨平台
Python还是一种优秀的跨平台语言,可以在很多平台上运行,包括Windows、Mac、Linux、UNIX等。因为它是解释型语言,相同代码可以在任何装有Python解释器的平台上运行,而目前几乎所有平台都具备了Python的解释器。Python甚至还有在Java(Jython)和.NET(IronPython)中运行的版本,为运行Python提供了更多可能的平台。
1.2.6 Python免费
Python还是免费的。自始至终,Python就是以开源的方式研发的,并且可以免费获取。任一版本的Python都可自行下载和安装,并可用于开发商业或个人应用,分文不收。
虽然世人的态度在慢慢转变,但由于担心缺乏技术支持,担心缺少付费客户的影响力,有些人仍然对免费软件持怀疑态度。但是Python已经被许多大牌公司用于实现关键业务,谷歌、Rackspace、Industrial Light&Magic和Honeywell只是其中的几个例子。这些公司和许多其他公司都很清楚,Python是一个非常稳定、可靠且支持良好的产品,拥有一个活跃的、博识的用户社区。即便提出高难度的Python问题,也能在Python互联网新闻组中迅速获得答案,速度会比大多数技术支持电话快得多,而且无须付费、保证正确。
{Python和开源软件!}
不仅Python是免费的,它的源代码也可以免费使用,可随意进行修改、完善和扩展。因为源代码是免费提供的,所以可供所有人查看并修改。其他那些带有版权的软件,鲜有能以合理的费用进行这种修改的。
如果是第一次接触开源软件,大家应该要了解,不仅可以自由使用和修改Python,还能够(也鼓励)为其做出贡献并对其进行改进。根据自身的条件、兴趣和技能,可以给出财务上的贡献,例如捐赠给Python软件基金会(Python Software Foundation,PSF)。也可以参加特殊兴趣小组(Special Interest Group,SIG),对Python内核或某个辅助模块的发行版进行测试并给出反馈。还可以向社区贡献一些自己或公司开发的东西。当然贡献的大小完全是自行决定的,但只要有能力就一定要考虑去做点什么。这里正在创造巨大的价值,有机会就来添砖加瓦吧。
Python满足了很多期许,表现力强大、可读性好、内置库丰富、跨平台,而且还是开源的。难道真的就完美无缺了吗?
1.3 Python的短板
虽然Python拥有很多优点,但没有哪种编程语言能够胜任所有工作,因此Python并不能完美地满足一切需求。如果要确定Python是否适用于当前场景,还需要了解Python不擅长的领域。
1.3.1 Python不是速度最快的语言
Python的执行速度可能算得上是一个缺点。Python不是一个完全编译的语言,而是先编译为内部字节码形式,然后交由Python解释器来执行。Python为某些操作给出了高效的实现,例如,用正则表达式解析字符串,可以做到与自己编写的任何C语言代码一样快,甚至会更快。但在大多数情况下,采用Python会比C之类的语言实现更慢。但大家应该保持以下观点:对绝大多数应用程序而言,现代计算机的计算能力都是过剩的。开发速度比程序运行速度更为重要,而Python程序通常编写速度会快很多。另外,用C或C ++编写的模块对Python进行扩展也比较容易,程序当中的CPU密集型部分可以交由这些模块来运行。
1.3.2 Python的库不算最多
虽然Python自带了一批优秀的函数库集合,而且还有很多其他库可用,但是Python在库的数量上并不算领先。像C、Java和Perl之类的编程语言,可用的库集合数量更为庞大。它们在某些领域提供的解决方案是Python所没有的,或者Python可能只提供了其中的一种可选方案。不过这些往往是相当专业的领域,而Python是很容易扩展的,既可以用Python,也可以用C或其他语言的现有库。对于几乎所有的常规计算问题,Python库的支持能力都非常出色。
1.3.3 Python在编译时不检查变量类型
与某些其他编程语言不同,Python变量不像容器那样工作,而更像是引用整数、字符串、类实例等各类对象的标签。这表示这些对象本身虽然是有类型的,但引用它们的变量并没有与类型进行绑定。变量
x
可能在某一行代码中引用一个字符串,而在另一行代码中引用一个整数:
Python将类型与对象关联,而不是与变量关联,这就意味着Python解释器无法识别出变量类型不符的错误。假设变量
count
本来是用来保存整数的,但如果将字符串
"two"
赋给它,在Python里也完全没问题。传统的程序员将这种处理方式算作一个缺点,因为对代码失去了额外的免费检查。但是这种错误通常不难发现和修复,Python的代码检测功能可以避免类型错误的发生。大多数Python程序员都认为,动态类型的灵活性是划得来的。
1.3.4 Python对移动应用的支持不足
在过去的10年中,移动设备的数量和种类都出现了爆炸式的增长,到处都是智能手机、平板电脑、平板手机、Chromebook,运行的操作系统也是五花八门。Python在移动计算领域并不算强大。虽然有解决方案可选,但在移动设备上运行Python并不总是能一帆风顺,用Python编写和发布商业应用还存在问题。
1.3.5 Python对多处理器的利用不充分
现在多核处理器已经普及,在很多情况下也都会带来性能的明显提升。但是,由于具有名为全局解释器锁(global interpreter lock,GIL)的特性,Python的标准版本并没有按照多内核来进行设计。详情请查看David Beazley、Larry Hastings等人关于GIL的讨论视频,或者访问Python wiki里的GIL页面。尽管用Python可以运行并发进程,但如果需要“开箱即用”的并发能力,Python可能并不合适。
1.4 学Python 3的理由
Python很多年前就已经出现了,并且还在不断发展。本书第1版基于Python 1.5.2,Python 2.x作为主流版本已经持续了很多年。本书是基于Python 3.6的,并在Python 3.7的Alpha版中通过了测试。
Python 3最初被异想天开地命名为Python 3000,因为它是Python历史上第一个打破向下兼容的版本。这就意味着,如果不做任何修改,在低版本Python中编写的代码可能无法在Python 3下运行。例如,在低版本的Python中,
print
语句不需要在参数外面加上括号:
print "hello"
在Python 3中,
print
成了一个函数,需要加上括号:
print("hello")
也许有人会想:既然会破坏以前的代码,为什么还要修改这种细节呢?正因为对任何语言而言这种改动都是件大事,所以Python的核心开发人员仔细考虑过这个问题。尽管Python 3中的变化会破坏与旧代码的兼容性,但这些变化很小,好处却很多。新版本Python的一致性更好,更具可读性,歧义也更少了。Python 3并不是翻天巨变,而是深思熟虑之后的演进。核心开发人员也贴心地提供了代码迁移方案和工具,可以安全高效地将以前的旧代码迁移到Python 3中,后续章节中将会介绍。此外还可以利用Six和Future库来简化代码转换操作。
为什么要学Python 3呢?因为它是迄今为止最好的Python版本。随着很多项目开始充分利用Python 3的改进之处,它将成为未来几年的主流Python版本。自从Python 3推出之后,库的移植工作一直在稳步进行。到目前为止,很多受欢迎的库都已支持Python 3了。事实上,根据Python就绪页面所示(http://py3readiness.org),360个最流行的库中已有359个被移植到Python 3中了。如果确实需要使用未被转换过的库,或者要使用基于Python 2建立的代码,那就继续使用Python 2.x吧。但如果是刚开始学习Python或新建项目,就使用Python 3吧。Python 3不仅更好用,而且是大势所趋。
1.5 小结
- Python是一种现代的高级语言,支持动态类型,带有简洁一致的语法和语义。
- Python跨平台且高度模块化,即适用于快速开发,也适用于大规模编程。
- Python运行速度合理,还可以通过轻松扩展C或C++模块进一步提升速度。
- Python内置了很多高级特性,如对象持久化存储、高级散列表、可扩展类的语法和通用比较函数。
- Python的库包罗万象,如数值计算、图像处理、用户界面和Web脚本处理。
- 有异常活跃的Python社区提供有力的支持。
- Python软件基金会主席作品!
-
经典Python入门书
本书是Python专业人士Naomi Ceder编写的Python语言的综合指南。她是一位经验丰富的教学者,她既能让读者关注语言的细节,又能使其具备解决实际问题的能力。本书中配有大量贴切的示例和边做边学的习题,有助于读者掌握每一个重要概念。无论读者是要抓取网站内容还是想玩转嵌套元组,都会赞叹本书的清晰、专注和对细节的重视。
本书主要内容
● 明确涵盖Python 3。
● 全面介绍核心库、包和工具。
● 配备精深的习题。
● 新增5章与数据科学相关的内容。