Python 3.7从零开始学
上QQ阅读APP看书,第一时间看更新

1.1 Python的起源

Python的创始人为Guido van Rossum(后文简称Guido)。1982年,Guido从阿姆斯特丹大学获得数学和计算机硕士学位。尽管Guido算得上是一位数学家,不过他更享受计算机带来的乐趣。用Guido的话说,尽管他拥有数学和计算机双料资质,不过他更倾向于做计算机相关的工作,并热衷于做所有和编程相关的活儿。

Guido接触并使用过Pascal、C、Fortran等语言,这些语言的基本设计原则是让机器运行得更快。在20世纪80年代,虽然IBM和苹果已经掀起了个人计算机浪潮,但是那时候个人计算机的配置很低,比如早期的Macintosh只有8MHz的CPU主频和128KB的RAM,一个大的数组就能占满内存,因此所有编译器的核心都是做优化,以便让程序能够运行。为了提高效率,程序员不得不像计算机一样思考,以便写出更符合机器口味的程序,在那个时代,程序员恨不得榨取计算机每一寸的能力,有人甚至认为C语言的指针是在浪费内存。至于动态类型、内存自动管理、面向对象等就不要想了,这些只会让你的计算机陷入瘫痪。

这种编程方式让Guido感到苦恼。虽然Guido知道如何用C语言写出一个功能,但整个编写过程却需要耗费大量时间。Guido还可以选择Shell,Bourne Shell作为UNIX系统的解释器已经存在很久了。UNIX的管理员常常用Shell写一些简单的脚本,以进行系统维护的工作,比如定期备份、文件系统管理等。在C语言中,许多上百行的程序在Shell中只用几行就可以完成。然而,Shell的本质是调用命令,它不是一个真正的语言,比如Shell没有数值型的数据类型,运用加法运算都很复杂。总之,Shell不能全面调动计算机的功能。

Guido希望有一种语言能够像C语言一样全面调用计算机的功能接口,又可以像Shell一样轻松编程。ABC语言让Guido看到了希望,该语言是由荷兰的数学和计算机研究所开发的,Guido曾经在该研究所工作,并参与了ABC语言的开发。与当时大部分语言不同的是,ABC语言以教学为目的,目标是“让用户感觉更好”,希望通过ABC语言让语言变得容易阅读、容易使用、容易记忆、容易学习,并以此激发人们学习编程的兴趣。

ABC语言尽管已经具备了良好的可读性和易用性,不过始终没有流行起来。当时,ABC语言编译器需要配置比较高的计算机才能运行,而这些计算机的使用者通常精通计算机,他们考虑更多的是程序的效率,而不是学习难度。ABC语言不能直接操作文件系统,尽管用户可以通过文本流等方式导入数据,不过ABC无法直接读写文件。输入输出的困难对于计算机语言来说是致命的。你能想象一款打不开车门的跑车吗?

1989年,为了打发圣诞节假期,Guido开始写Python语言的编译器。Python这个名字来自于Guido所挚爱的电视剧——Monty Python’s Flying Circus,他希望这个新语言Python能够符合他的理想:创造一种介于C和Shell之间,功能全面、易学易用、可拓展的语言。Guido作为一个语言设计爱好者,已经尝试过设计语言,这次不过是一种纯粹的hacking行为。

1991年,第一个Python编译器诞生。该编译器是用C语言实现的,并且能够调用C语言的库文件。Python诞生时便具有类、函数、异常处理、包含表和词典在内的核心数据类型以及模块为基础的拓展系统。

Python的很多语法来自于C,却又受ABC语言的强烈影响。来自ABC语言的一些规定至今还富有争议(比如强制缩进),不过这些语法规定让Python容易理解。另一方面,Guido聪明地选择让Python服从一些惯例,特别是C语言的惯例,比如回归等号赋值。Guido认为“常识”确定的东西没有必要过度纠结。

Python从一开始就特别在意可拓展性。Python可以在多个层次上拓展,在高层可以直接引入.py文件,在底层可以引用C语言的库。程序员可以使用Python快速编写.py文件作为拓展模块。当性能是重点考虑的因素时,程序员可以深入底层写C程序,将编译的.so文件引入Python中使用。Python就像使用钢筋建房一样,要先规定好大的框架,程序员可以在此框架下相当自由地拓展或更改。

最初,Python完全由Guido本人开发,后来逐渐受到Guido同事的欢迎,他们迅速反馈使用意见,并参与Python的改进。Guido和一些同事构成了Python的核心团队,他们将自己大部分业余时间用于hack Python,Python逐渐拓展到了研究所外。Python将许多机器层面的细节隐藏交给编译器处理,并凸显逻辑层面的编程思考,程序员使用Python时可以将更多时间用于程序逻辑的思考,而不是具体细节的实现,这一特征吸引了广大程序员。Python开始流行起来了。