1.2 Python语言简介

Python语言是一种面向对象的解释型计算机程序设计语言,由荷兰人Guido van Rossum于1989年发明,第一个公开发行版发行于1991年。之所以选中Python(“大蟒蛇”的意思)作为该编程语言的名字,是因为Guido是Monty Python喜剧团体的爱好者。Python从ABC语言继承了很多特性。ABC语言是由Guido参加设计的一种教学语言。Guido本人觉得,ABC这种语言非常优美和强大,是专门为非专业程序员设计的。但是,ABC语言并没有成功,究其原因,Guido认为是其非开放造成的。Guido决心在Python语言中避免这一错误。就这样,Python语言在Guido手中诞生了。可以说,Python语言是从ABC语言发展起来,并且结合了UNIX Shell和C语言的习惯。

Python语言已经成为最受欢迎的程序设计语言之一。2019年1月,它被TIOBE编程语言排行榜评为2018年度语言。最近,Python语言的使用率呈线性增长。由于Python语言的简洁性、易读性以及可扩展性,在国外用Python语言做科学计算的研究机构日益增多,一些知名大学已经采用Python语言来教授程序设计课程。例如,麻省理工学院的计算机科学及编程导论就使用Python语言讲授。众多开源的科学计算软件包都提供了Python语言的调用接口,如著名的计算机视觉库OpenCV、三维可视化库VTK。而Python语言专用的科学计算扩展库就更多了,如3个十分经典的科学计算扩展库:NumPy、Pandas和Matplotlib,它们分别为Python语言提供了快速数组处理、数值运算以及绘图功能。因此,Python语言及其众多的扩展库所构成的开发环境十分适合工程技术、科研人员处理实验数据和制作图表,甚至开发科学计算应用程序。

Python语言的设计哲学是“明确”“简单”“优雅”。Perl语言中“总是有多种方法来做同一件事”的理念在Python开发者中通常是难以忍受的。Python开发者的哲学是“用一种方法,最好是只有一种方法来做一件事”。在设计Python语言时,如果面临多种选择,Python开发者一般会拒绝花哨的语法,而选择没有或者很少有歧义的语法。这些准则被称为Python格言。在Python解释器内运行“import this”可以获得完整的列表。

Python开发人员尽量避开不成熟或者不重要的优化。一些针对非重要部位的加快运行速度的方法通常用Python的模块实现。所以很多人认为Python运行速度很慢。不过,根据二八定律,大多数程序对速度要求不高。对于某些对运行速度要求很高的情况,Python设计师倾向于使用JIT技术,或者使用C/C++语言改写这部分程序。可用的JIT技术是PyPy。

Python是完全面向对象的语言。函数、模块、数字、字符串都是对象,并且完全支持继承、重载、派生,有益于增强源代码的复用性。Python支持重载运算符和动态类型。相对于Haskell这种传统的函数式编程语言,Python对函数式设计只提供了有限的支持。其有两个标准库(functools、itertools)提供了久经考验的函数式程序设计工具。

Python在执行时,首先会将“.py”文件中的源代码翻译成Python的byte code(字节码),然后再由Python Virtual Machine(Python虚拟机)来执行这些翻译好的byte code。这种机制的基本思想跟Java是一致的。然而,Python Virtual Machine与Java的Virtual Machine不同的是,Python的Virtual Machine是一种更高级的Virtual Machine。这里的高级并不是通常意义上的高级,不是说Python的Virtual Machine比Java的功能更强大,而是说和Java相比,Python的Virtual Machine距离真实机器更远。或者可以这么说,Python的Virtual Machine是一种抽象层次更高的Virtual Machine。基于C的Python翻译出的字节码文件,通常是“.pyc”格式。

Python采用动态类型系统。在翻译时,Python不会检查对象是否拥有被调用的方法或者属性,而是直至运行时,才做出检查,所以操作对象时可能会抛出异常。不过,虽然Python采用动态类型系统,但它同时也是强类型的。Python禁止没有明确定义的操作,比如列表加字符串。

Python语言有以下特点。

(1)简单易学:Python是一种代表简单主义思想的语言。Python极其容易上手,阅读一个良好的Python程序就感觉像是在读英语一样。

(2)免费、开源:Python是自由软件之一。使用者可以自由地发布这个软件的拷贝,阅读它的源代码,对它做改动,把它的一部分用于新的自由软件中。

(3)高级语言:用Python语言编写程序时无须考虑如何管理你的程序使用的内存等这类底层细节。

(4)可移植性:由于它的开源本质,Python已经被移植到许多平台上。这些平台包括Linux、Windows、Mac OS。用Python语言写的程序不需要编译成二进制代码。你可以直接从源代码运行程序。在计算机内部,Python解释器把源代码转换成称为字节码的中间形式,然后再把它翻译成计算机使用的机器语言并运行。这使得Python语言更加简单,也使得Python程序更加易于移植。

(5)可扩展性:如果需要一段关键代码运行得更快或者希望某些算法不公开,可以部分程序用C或C++编写,然后在Python程序中使用它们。反过来也可以把Python嵌入C/C++程序,从而向程序用户提供脚本功能。

(6)丰富的库:Python标准库很庞大。它可以帮助处理各种工作,包括正则表达式、文档生成、单元测试、线程、数据库、网页浏览器、CGI、FTP、电子邮件、XML、XML-RPC、HTML、WAV文件、密码系统、GUI(图形用户界面)、Tk和其他与系统有关的操作。除了标准库以外,还有许多其他高质量的库,如wxPython、Flask和Pillow图像库等。

Python是一个跨平台的脚本语言。如果它规定了一个Python语法规则,实现了Python语法的解释程序,就成为Python的解释器。Python解释器有许多种,常用的有:

(1)CPython:ClassicPython,也就是原始的Python实现,需要区别于其他实现时才以CPython称呼;或称作C语言实现的Python。这是最常用的Python版本。

(2)Jython:Java语言实现的Python,Jython可以直接调用Java的各种函数库。

(3)PyPy:使用Python语言写的Python解释器。

(4)IronPython:运行在.net平台的Python解释器。

Python有许多集成开发环境,常用的有:

(1)IDLE:Python内置IDE(随Python安装包提供)。

(2)PyCharm:由著名的JetBrains公司开发,带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,比如调试、语法高亮、Proj ect管理、代码跳转、智能提示、自动完成、单元测试、版本控制。

(3)Spyder:安装Anaconda自带的高级IDE,与Matlab开发环境类似。

(4)Jupyter:安装Anaconda自带的高级IDE,为数据科学家首选的开发环境。

(5)Python Tutor:在线开发环境,网址是http://www.pythontutor.com/,可以可视化Python程序运行过程。本书有不少例子用此开发环境进行说明。