人们常说Python语言简单,编写简单程序时好像也确实如此。但实际上Python绝不简单,它也是一种很复杂的语言,其功能特征非常丰富,能支持多种编程风格,在几乎所有方面都能深度定制。要想用好Python,用它解决复杂问题,开发功能正确的、效率高的程序,需要很好地理解上面说明的许多高级概念和特征,还需要理解这门语言的内在性质。
Python虽说是目前非常热门的一种编程语言,但有关Python编程和应用的书籍,虽不能说是汗牛充栋、铺天盖地,也是林林总总、选择很多。《程序员学Python》与其他书籍有什么不同呢?
《程序员学Python》
裘宗燕 著
根据对读者已有知识基础的考虑,本书对Python中与其他语言类似的基本编程机制的介绍相对精练,将更多篇幅集中于各种反映了Python特点的特征及相关编程和应用技术方面。
例如,书中前两章详细讨论了函数定义的嵌套结构和作用域规则,丰富的形参/实参机制和形实参匹配规则,高阶函数的概念和应用,迭代器和可迭代对象的概念和定义,lambda表达式(匿名函数)及其应用,标准组合对象的构造和使用,描述式的概念和应用等。书中还通过较大型的实例展示组合数据对象的应用和相关编程技术。
程序员学习Python不是为了写几个玩具程序,而是为了开发有用的系统。针对这种需求,本书深入讨论了许多与开发复杂和大型程序有关的问题,以及相关的Python特征和应用技术。
书中内容包括程序的功能分解、信息局部化、模块化;Python函数定义、类定义和模块机制的使用;Python中面向对象机制的相关概念、结构和应用技术,以及一些特殊功能类的构造;程序的模块分解和管理,复杂模块结构的物理组织和导入技术等。
本书是针对程序员或其他学过用过至少一种编程语言、有一些编程经验的人们(如学过计算机基础课程的大学生)的Python编程著作。并假定读者对于计算机的基础概念、程序和编程,都有一定的理解,但是没用过Python。
书中介绍了Python的基本特征,深入讨论了各方面的重要问题、高级机制和重要技术,目标是帮助读者深入理解Python语言,理解如何用好这门语言,理解如何用它写出真正能用的良好程序。
总而言之,本书是一本全面介绍Python语言各方面特征和编程技术的著作,其内容涵盖了Python核心语言的所有方面,讨论的内容足以支持读者使用Python去开发复杂的大型Python程序。
Python语言的发展和应用
Python语言目前由Python软件基金会(Python Software Foundation,PSF)主导开发和管理。PSF是一个非营利性的国际组织。Python的官方网址为python.org,在那里可以找到有关Python语言和系统开发的最新信息,还有许多资源信息和链接。
Python语言的开发经历了许多版本。2000年发布的Python 2.0表明该语言进入了一个新阶段,也是国际上较广泛地接受它的标志性事件。Python 3.0于2008年年底发布,设计中整合了有关语言发展的许多成熟想法,对语言做了全面清理,修正了许多重要缺陷,使整个语言的概念体系更加清晰,各方面的结构更具有统一性。
目前,Python的发展和使用还处于2.0版与3.0版并存的阶段。PSF早已宣告Python 2.7是Python 2的最后版本,今后只做有限完善,不再做大的版本升级,开发和研究力量将集中到Python 3.0的开发。经过几年发展,Python 3.5于2015年9月发布,Python 3.6于2016年12月发布。有统计显示,目前,Python 2.0和3.0在实际开发中的使用比例大约各占一半(2016年下半年的情况),后者的使用比例正在不断上升。有消息说PSF和各重要Python库的开发者都已确定,在2020年以后不再支持Python 2。
由于这些情况,本书选择Python 3.0作为工作语言,以适应发展需要。书中所有实例(及所附代码)都在3.5或3.6版本的系统中开发和测试,但这些代码并不特定于这些版本(除个别专门说明的例外),大都能在各种Python 3.0版本的系统上运行。
Python语言的特点
Python的一个重要设计目标是让程序简单、清晰和优雅,坚持一套整齐划一的设计风格。Python程序具有易写、易读、易维护的特点,受到广大程序员欢迎。这些特质也是导致Python的使用越来越广泛的原因。21世纪以来,Python已发展为世界上最受欢迎的编程语言之一,其使用非常广泛。国际上一些公司做过(或一直在做)各种编程语言使用情况的调查,统计结果中Python都位于前四五名之内。它还被TIOBE编程语言排行榜(最有影响力的语言排行榜之一)评为2010年的年度语言。
Python被广泛认为是一种容易入门的语言。实际上,Python语言机制的跨度比较大,从完成最简单计算的表达式开始,一直延伸到许多当前最先进的编程概念,如面向对象的程序设计、数据抽象、迭代器、异步编程等。这些情况有利于学习者在一个语言里逐步深入地学习许多编程概念和技术。Python用正文缩进形式表现程序的结构,具有较好的可读性。
Python是一种比较高级的编程语言。除了最基本的编程机制外,它还提供了使用方便的数据功能,可以很方便地组织和管理大批数据。Python的所有编程机制和结构都围绕着**对象**的概念,程序里定义和操作的各种实体都是对象,不仅所有数据都是对象,函数和类等也是对象。它也能很好支持**面向对象编程**的理念和相关技术。
由于其基本设计的一些特点,Python代码和部件比较容易重用,已开发的程序容易修改和扩充,有利于软件的升级改造,可以减轻软件开发者的工作负担,提高程序开发的效率。此外,Python语言的设计也为开发大规模软件系统提供了很好支持。这些是许多IT公司乐于选择和使用Python作为其主要开发语言的重要原因。
在用Python开发程序时,可以采用交互式的执行方式,随时把代码发送给系统,立刻看到执行效果。这种方式使人更容易在编程中做各种试验,可以提高工作效率。一个Python程序文件(称为模块)的内容就是一系列简单或复杂的命令的序列。人们也把这样的语言称为**脚本语言**(script language),其程序就像一个工作脚本。
实际上,Python并不是简单的脚本语言,而是一个能支持大规模软件开发的通用编程语言,其实现具有较高的执行效率。PSF的Python系统带有一个很大的标准库,提供了很多在实际开发中非常有用的功能。此外,全世界的开发者已经为Python开发了面向各种应用领域的大量专用程序包,例如面向图形用户界面的设计和编程,面向网络应用、数值计算、数据统计和处理、图形图像处理、可视化等。针对所有重要应用领域,都可以找到相关的程序包,大大方便了人们用Python开发领域应用软件和综合性软件的工作。
Python语言和标准库的设计特别考虑了可扩充性,提供了丰富的接口和工具,使有经验的程序员比较容易使用其他语言,例如C、C++、CPython(一种专门用于扩充Python的C语言工具)等编写Python模块,然后能像Python标准库包一样方便地使用。这种情况也使一些大公司把Python用作高级的**粘接语言**(glue language),用一些较低级的语言实现一批性能要求较高的完成具体工作任务的模块,而后用Python实现整个系统的高层控制和调度。这样做,既能获得很好的开发效率,也有利于修改和扩充。
Python基金会提供最新版本的Python语言系统和基本开发环境,任何人都可以免费获取。该系统可以在各种主流计算机和软件平台上运行,包含了丰富的标准程序库和完整文档。此外,也存在另外一些商业的或非商业的Python系统可供选择。经过多年使用,全世界的Python开发者和使用者已经形成了一个活跃的专业社群,活跃在世界各地(包括中国),探讨、交流学习和使用Python的经验。互联网有很多与Python有关的信息,有许多Python讨论组。这些都促进了Python语言的学习和传播。
当然,Python也不是完美无缺的(完美的语言并不存在),也有些缺点。还有一些使用需要注意的问题。后面讨论中也会提到一些这方面的情况。
Python的应用情况
Python已经有了非常广泛的实际使用。国际上的许多知名IT公司和机构以其作为主要开发语言,如美国的Google、Yahoo!、Dropbox等大公司,CERN(欧洲原子能研究中心)、NASA(美国国家航空航天局)等重要机构,还有大量较小的公司和机构。国内企业的应用正在发展,有较大影响的豆瓣网就是用Python开发的。
此外,全世界Python社区一直在努力,开发了许多适合各领域需要的Python包,这些工作也大大推动了Python的应用。例如,Python的科学计算专用扩展库,包括NumPy(高效的数组数据处理)、SciPy(高性能数值运算)和matplotlib(数学绘图库)等。大量面向数据处理和计算的开源包也为Python使用提供了接口(可作为库调用,支持Python应用开发),如著名的计算机视觉库OpenCV、三维可视化库VTK、医学图像处理库ITK等。Python语言与这些库结合,构成的开发环境很适合工程技术人员和科研人员处理实验数据、制作图表,以及开发科学和工程计算方面的应用程序。在应用系统领域,Python社群开发了一批支持网络应用开发的Python库和其他方面的库及编程框架,这些工作和后续经验的积累,已经使Python成为目前使用最多的应用系统开发语言之一。
Python还被广泛用于复杂的和大规模的数据处理,成为目前人们在研究、开发大数据和人工智能等热门发展方向时使用最多的语言之一。
Python系统和编程环境
本节简单介绍PSF主导开发的CPython系统及其附带的编程环境。对初学者而言,使用这个系统及其所带的程序包就足够了。一些开源社团或软件厂商开发了更强大的开发环境,利用CPython的功能或其他Python实现。鉴于本书的基本设想和目标读者群,这里不准备涉及任何超出CPython系统的内容。有兴趣的读者可以自己学习。
Python是一种高级语言,具有易读易用的形式。为了运行Python程序,需要有一个Python解释器来填补Python源程序和计算机之间的鸿沟。PSF的Python系统(CPython,以下说Python系统时专指这个系统)的主要部分就是一个解释器[1]。
下面以Windows系统中安装Python的情况为例,在其他系统里的安装情况类似。从PSF网站或其他地方下载Python安装文件,在所用计算机环境成功安装后,通常可以看到快捷启动方式。Python系统各部分的安装位置、系统的启动方式、启动后窗口显示的情况,在不同环境里可能有些不同,但在功能上没有本质差别。
以命令行方式启动Python解释器,启动后的情况如图1所示。解释器显示版本等信息,最后一行是**提示符**串`>>>`,可以在这里输入要求执行的命令(程序)。
图 1 启动Python解释器后显示的命令行窗口
Python解释器采用解释方式工作。一旦得到一个完整的程序单元,它就执行该单元并输出结果,然后重复。后面还会介绍解释器工作方式的一些细节。
CPython提供了一个程序开发环境IDLE,使程序员可以方便地编辑程序并随时运行。启动IDLE将看到一个窗口,顶部有标准的菜单条。图2显示了IDLE的解释执行窗口的一个情况[2],可以看到解释器的提示符。输入一个程序单元(表达式或语句)后换行,解释器就会执行它并显示结果。这里显示的是执行3个表达式后的情况。第一个表达式要求计算1的值,解释器给出1;第二个表达式要求计算1+2;第3个表达式要求计算2的1000次幂,得到的大整数输出了几行。
图 2 启动IDLE执行窗口(Shell)的情况
IDLE的另一种窗口是编辑器,如图3所示。在这里编辑的程序可以随时运行。一个代码单元称为一个**模块**,执行前需要保存为文件。Python术语中**模块**和**程序文件**基本是同义词,程序文件应该以py作为扩展名。
图 3 IDLE编辑器窗口
IDLE窗口支持常规的编辑命令。与执行窗口相比,这里多了Format和Run两个菜单。Format里的命令用于修改被编辑程序的格式。Run菜单用于启动模块执行,包括启动(或激活)关联执行窗口,调用解释器检查代码的语法,从空环境开始执行所编代码。运行时,解释器逐一执行其中语句,代码的标准输入和输出(常见的是用标准函数`input`和`print`)通过关联的执行窗口实现。
IDLE的执行窗口还有一个Debug菜单,其中命令服务于程序调试,需要与编辑窗口配合使用。有关功能将在“附录C”介绍。此外,运行IDLE时按F1功能键,或者通过Help菜单的相应选项,都能打开Python系统自带的语言文档。
用IDLE(或其他编辑器)开发的Python程序(模块)可以脱离编辑器,直接交给Python解释器执行。假设要执行的文件是prog.py,只需在命令行窗口中键入:
就能启动Python执行该程序了[假设Python解释器已在操作系统(OS)的命令路径上]。
IDLE是一个简单的开发环境,在开发复杂的应用系统时可以考虑用其他开发环境。有些通用开发环境带有配合使用CPython的插件,例如Eclipse,可以在安装插件后用于Python程序开发。
JetBrains公司的PyCharm是目前比较流行的一个专业开发环境,提供了很好的开发支持。由于Python程序文件的内容就是普通文本,完全可以用任何文本编辑器编辑开发。CPython的标准库还提供了一些支持调试的包。
前面说过,CPython系统带有一个标准库,包含一大批程序包,系统文档中包含了标准库包的文档。标准库包的情况丰富多彩,有些包提供一些基础功能,如数学函数、文件操作、文件输入输出、随机数生成等。另一些包提供通用的编程服务功能,例如字符串处理、正则表达式、数据持久性、图形用户界面编程、并发编程、程序源文件组织等。一些包提供了某些特殊功能,如支持Web应用程序、媒体处理、加密解密等;还有一些支持程序开发、调试等。如果开发中需要某些功能,但语言没提供,可以到标准库中找找。
本书主要关注Python语言本身的编程问题,之后的讨论将不涉及工具的使用。本书也不准备作为标准库的使用手册,对标准库的介绍将限于书中讨论Python语言基本功能和编程技术的需要。读者可以查看CPython的自带文档或其他材料,找到更多信息。
除了基本的Python系统和标准库程序包,一些个人、组织或公司也开发了许多第三方库,或对一些有用的库做了Python定制。有些库已被广泛使用,如支持图形用户界面开发的wxPython和PyQt。CPython推荐用自带的库安装工具pip安装其他库和程序包,Python参考手册中有说明。
《程序员学Python》
裘宗燕 著
本书是程序设计领域学者裘宗燕教授的潜心力作,程序员的Python入门和进阶指南。书中全面介绍了Python语言的各方面特征和应用技术,讨论了准确理解Python、正确使用Python语言开发程序所需要的深入概念和情况,还介绍了用Python开发较大型或较复杂程序时应该了解的一些高级功能,如程序的模块组织和导入系统,生成器、闭包和装饰器,基本的和高级的面向对象编程机制和技术,以及作为Python最新扩展的协程和异步编程等。
此外,本书还提供完整的进阶内容和对应案例,让读者全面深入地了解深度学习的知识和技巧,达到学以致用的目的。