本书是学习Python 编程语言的入门书籍。Python 是一种很流行的程序语言,可以作为独立的程序和脚本在各种领域中应用。Python 免费、可移植、功能强大,而且使用起来相当容易。.
无论你是编程初学者,还是专业开发人员,本书的目标是让你快速掌握核心Python 语言基础。阅读本书后,会对Python 有足够的了解,能够将其应用于你所要从事的应用领域中。
关于第三版
本书第二版于2003 年末出版,从那时到现在的四年中,Python 语言本身已经发生了实质性的变化,因此我在Python 培训课程中介绍的话题也随之发生了改变。虽然我试着尽可能保留上一版的文字,但是本版书反映了Python 语言和Python 培训中发生的最新变化,此外还有一些结构性的改变。
本书中Python 语言的变化
对于Python 语言,本书进行了全面更新,反映了Python 2.5 以及从第二版出版以来语言的所有变化(第二版大部分是基于Python 2.2 ,以及在Python 2.3 版即将发布前提出的Python 2.3 版的一些特性)。此外,还会在本书合适的地方讨论Python 3.0 的预期的变化。下面是这门语言的一些主要的主题,读者将会发现这些主题在本书中是全新的内容或在原有基础上进行了扩展:
新的B if A else C 条件表达式(第12 章)。
with/as 环境管理器(第27 章)。
统一try/except/nally (第27 章)。
相对导入语法(第21 章)。
生成器表达式(第17 章)。
新的生成器函数的特性(第17 章)。
函数装饰器(第26 章)。
集合对象类型(第5章)。
新的内置函数:sorted 、sum 、any 、all 、enumerate (第4章和第13 章)。
小数固定精度对象类型(第5章)。
文件、列表解析(list comprehension )和迭代器等新的扩展内容(第13 章和第17 章)。
新的开发工具:Eclipse 、distutils 、unittest 和doctest 、IDLE 加强版、Shedskin 等(第3章和第29 章)。
贯穿本书始末都会讨论(Python 语言的一些细微变化)(例如,广泛使用的True 和False 、用新的sys.exc_info 来获取异常的细节、基于字符串的异常的退出、字符串方法、apply 和reduce 内置函数)。此外,有些在上一版中属于新的功能,也会在本书中进行扩展,包括第三个限制值的分片运算,以及书中apply 的任意参数调用语法。
本书中Python 培训的变化
. 除了Python 语言变化外,本书又增加了我最近几年开设的Python 培训课程中所介绍的新主题和例子。例如,读者会发现:
全新的一章介绍内置类型(第4章)。
全新的一章介绍语句语法(第10 章)。
全新的一章以加强涵盖的方式,介绍动态定型(第6章)。
详细的OOP 介绍(第22 章)。
文件、作用域、嵌套语句、类以及异常等更多的新例子。
很多新增的内容和变化都是考虑到Python 的初学者,有些主题则移到了培训课程中最恰当的地方,在那里最易于吸收所学知识。例如,列表解析和迭代器,最初是和for 循环语句一起出现的,而不是和之后的函数工具一起出现的。
读者也会发现,很多关于原本核心语言的讨论在本书中有了实质性的扩展,增加了新的讨论内容和例子。因为本书已成为学习核心Python 语言的标准资源,介绍时我有意地让内容更加完整,使用了新的案例来进行扩展。
此外,本书也整合了新的Python 技巧和窍门,这是我在过去10 年中,从课堂上授课以及过去15 年使用Python 从事实际工作所收集来的。练习题已做了更新和扩充,来反映当前Python 的最佳实践、新的语言特性以及课堂中所遇到的初学者常犯的错误。总之,本书所讨论的核心语言内容比之前的版本更多,不仅仅是因为Python 变得更大,还因为我增加了一些在实际应用中证实了相当重要的脉络信息。
本书结构性变化
和上一版一样,为了适应本书当前更为完整的事实,书的内容经过了合理的划分。也就是说,我把核心语言题材组织成许多章节,让内容更易于理解。例如,类型和语句现在是两个顶层的部分,每种主要类型和语句话题都有一章。这种新结构的设计,是为了在本书中多讲一些内容,而又不会让读者产生恐惧。在此过程中,练习题和“陷阱”(常见的错误)则从每章的结尾移到了每部分结尾,现在它们出现在每部分最后一章的结尾处。
在第三版中,我也增强了每部分结尾处的练习题和每章结尾的小结以及每章结尾的习题,来帮助读者在做完那些题目后,可以达到复习章节的效果。每章的最后都有一组问题,来帮助读者复习和测试对该章内容的理解。练习题解答在附录B。即使读者保证能够正确回答问题,我还是鼓励读者去看一看解答,因为答案本身就是一种复习。
尽管有这些新主题,本书仍然是面向Python 初学者的,其设计目标就是要作为程序员学习Python 语言的首选书籍(注1)。本书保留前两版的许多题材、结构和焦点。在适当的地方,我会为初学者扩展简介的内容,同时把更高级的新话题和讨论的主线隔离出来,以免掩盖了基础知识。另外,因为本书绝大部分是采用经过时间检验的培训课程的经验和题材编写的,就像前两版那样,仍然可以作为自学Python 的入门教材。
注1: 所谓的“程序员”,是指的是过去以任何程序语言或脚本语言编写过一行程序代码的任
何人。如果这不包括你在内,你还是可能会觉得这本书有些用处,但是,要注意一点,
本书会花很多时间教授Python 的知识,而不是谈论编程基础。
本书的范围变化
编写第三版的目的是将其作为核心Python 语言的教程,仅此而已。首先要深入学习这门语言,然后学习应用层面的编程应用。本书的介绍是由下至上并且是循序渐进的,不过,本书会对整个语言进行概述,独立于其应用角色之外。
对某些人而言,“学习Python ”就是花一两个小时在网络上看一看教程。对于已经是高级程序员的人来说,这样行得通,毕竟和其他语言相比,Python 确实简单得多。这种走捷径的问题在于,这些实习生最终可能会在不寻常的情况中跌倒而被卡住:变量变了,可变默认参数值的变化难以理解等。本书的目标是提供扎实的Python 基础知识,即使发生不寻常情况时,也能够理解。..
这种范围应该慎重。我们把注意力集中在语言基础上,就能以更加令人满意的深度研究这些主题。其他书籍,例如,O, Re illy 的《Programming Python 》、《Python Cookbook 》、《Python in a Nutshell 》以及《Python Pocket Reference 》,则补充了本书的遗漏,对应用层面的主题和参考材料提供更完整的说明。本书的目的是致力于教授Python ,以便能够将其应用在读者所从事的任何领域中。
因为本书的侧重点有所变化,上一版中有些参考内容和更高级内容的章节(大约占上一版的15% )已被去掉,扩充了核心语言的章节。这样一来,本书的读者会发现对核心语言有了更完整的介绍,使得本书成了更实用的Python 书籍。本版中加入了一些更高级的例子,作为读者自学的程序,也当作最终的练习题(参考第29 章)。
关于本书
本部分强调了本书的一般性重点,和本书的版本无关。没有哪本书可以满足每一位潜在的读者,所以阅读之前了解编写本书的目标是很重要的。
事前准备
事实上,使用本书确实没有什么绝对的先决条件。初学者和功底深厚的编程高手都可以成功地使用本书。如果打算学习Python ,本书可能就适合你。不过,一般来说,我发现在使用本书之前有过任何编程或脚本经验的读者,会有些帮助。但是,并不要求每位读者都得这样。
本书是作为程序员学习Python 的入门书籍来设计的。对于那些从来没有接触过计算机的人,可能就不适合(例如,我不会花时间讨论计算机是什么)。但是,这并不意味你需要有编程的背景或教育。
另一方面,我不会假设读者什么都不懂而冒犯了读者:使用Python 来做有意义的事,这很容易,而本书就是要教读者怎样做。本书有时会用Python 和C、C++ 、Java 以及Pascal 语言来做比较,但是如果读者过去没有使用过这些语言,则完全可以放心地忽略这些比较。
本书的范围和其他书籍
虽然本书涵盖了Python 语言所有的基本内容,但基于速度和篇幅的考虑,我还是把本书的范围缩小了。为了让事情简单化,本书关注核心概念,使用小并且独立完备的例子来示范重点知识,并且有时省略了可以在参考手册中找到的细节。因此,把本书当作通往更高级应用的垫脚石和完整的入门书籍再好不过了。
例如,我们不会谈太多的Python/C 集成,这个复杂话题显然是许多基于Python 的系统的核心。我们也不会谈太多Python 的历史或发展过程。对于流行的Python 应用程序也只简单浏览而已,例如,GUI 、系统工具以及网络脚本机制,而有的则根本不提。显然,这会漏掉整体内容的一部分。
从整体上来说,Python 是为了让脚本世界的质量等级再提升几个级别。而Python 的有些观念需要的背景环境,不是这里所能提供的,如果没有推荐读者读完此书后进行更深入地学习,那就是我的疏忽了。我希望本书的绝大多数读者最终都可以继续走下去,从其他书籍完整了解应用层面的编程技术。
因为本书关注的是初学者,设计上自然是和O,Reilly 的其他Python 书籍互补。例如,我编写的另一本书《Programming Python 》,提供更大并且更完整的例子,还有应用程序编程技巧的教程,而且我有意将其设计为读完此书后的后续书籍。概括地说,本书的目前版本和《Programming Python 》反映了作者培训内容的两部分:核心语言和应用程序程序设计。此外,O'Reilly 的《Python Pocket Reference 》也是搜索本书忽略的一些细节的快速参考手册。
其他后续的书籍也可提供参考、附加的例子或者于特定领域中(例如,《We b 开发和GUI 》)使用Python 的细节。例如,O,Reilly 的《Python in a Nutshell 》以及Sams 的《Python Essential Reference 》提供了参考,而O,Reilly 的《Python Cookbook 》为那些已熟识应用程序设计技巧的人,提供了独立完备的例子。因为别人对书籍的评价是很主观的,我鼓励读者亲自浏览这些书,来选择满足自己需求的进阶书籍。不过,无论选择哪本书,要记住,Python 其余内容所需学习的例子都相当实际,以致于这里没有空间能够容纳。
尽管这么说,我想读者还是会发现本书是作为学Python 的首先书籍,虽然范围有限(也许也正是因为如此)。你会学到初学阶段编写独立的Python 程序和脚本所需要的一切。当你读完本书时,不仅学到了语言本身,也会学到如何将其合理地运用于日常工作中去。此外,当读者遇到更高级的主题和例子时,将会有足够能力去解决它们。
本书的风格和结构
本书是基于为期3天的Python 课程的培训材料编写而成的。每章末尾有本章对应的习题,并且在每部分最后一章末尾有本部分对应的练习题。习题和练习题的解答在附录B。习题可以帮助读者复习的内容,而练习题引以帮助读者以正确的方式编写代码,而且这通常也是该课程的重点之一。
我强烈建议做一下习题和练习题,不仅是为了积累Python 编程的经验,也是因为有些练习题会引出本书没有涉及的主题。如果碰上难题,附录B的解答应该可以帮助你(而且我也鼓励你尽量地阅读那些解答)。
本书的整体结构也是来自于课程的培训材料。因为本书是用来快速地介绍语言的基础的,我是以语言的主要功能进行组织并介绍的,而不是以例子为主。我们采用了由下至上的手法:从内置对象类型,到语句,再到程序单元等。每章都比较完备,但是后续的章节会利用到前面章节所介绍的概念(例如,谈到类时,我假定你已经知道如何编写函数),所以对多数读者来说,循序渐进应该是最合理的阅读方法。
一般来说,本书用由下至上的方式介绍Python 语言,以一部分谈一种主要语言功能(类型以及函数等等)来组织结构,并且多数例子都很小,它们都是独立完备的(有些人可能会说本书的例子显得空洞,但是,这些例子都是为了说明知识点而设计的)。更确切地说,本书内容如下。
第1部分,使用入门
我们以概览Python 作为开始,来回答一些常见的问题:为什么要使用这门语言、它
有什么用处等。第1章介绍这门技术背后的主要思想,以及历史背景。然后,介绍
本书技术方面的内容,我们会探索Python 运行程序的方式。介绍这一部分的目标是
让读者有足够的知识,可以跟上后面的例子和练习题的步伐。
第2部分,类型和运算
接着,我们开始Python 语言之旅,深入研究Python 的主要内置对象类型:数字、列
表和字典等。使用这些工具,就可以用Python 做很多事了。这是本书最重要的一部
分,因为部分内容这是学习后续章节的基础。我们也会在此部分谈到动态定型和其
引用值:这是掌握用Python 的关键。
第3部分,语句和语法本部分开始介绍Python 的语句:输入的代码会在Python 中创建并处理对象。此外,本部分也会介绍Python 的一般语法模型。虽然这一部分的重点是语法,但也会介绍相关的工具。例如,PyDoc 系统,并探索其他一些编写代码的方法。
第4部分,函数在这一部分开始讨论Python 的更高层次的程序结构工具。函数是为重用而打包代码并避免代码冗余的简单方式。在这一部分内容中,我们将会探索Python 的作用域法则、参数传递等技术。
第5部分,模块Python 模块把语句和函数组织成更大的组件,而这一部分会说明如何创建、使用并重载模块。我们也会在这里看到一些更高级的主题,例如,模块包、模块重载以及__name__ 变量。
第6部分,类和OOP 在一部分,我们探索了Python 的面向对象编程(OOP )工具类—— 类是选用的,但却是组织代码来定制和重用的强大工具。读者将会看到,类几乎是重复利用在本书中谈到的概念,而Python 的OOP 多数就是在链接的对象中查找变量名。读者也会了解到,OOP 在Python 中是选用的,但是可以减少大量的开发时间,尤其是对长期的策略性项目开发来说。
第7部分,异常和工具本书最后一部分讨论Python 异常处理模型和语句,加上对开发工具的简介(当读者开始编写较大的程序时,工具就会变得更实用。例如,调试和测试工具)。这一部分放在最后,是因为异常现在应该都是类了。
第8部分,附录(附录内容请到华章网站下载)本书结尾是两个附录,介绍了在各种计算机上使用Python 的与平台相关的技巧(附录A),并提供了每章结尾习题和每部分末尾的练习题的解答(附录B)。
注意:索引和目录可用于查找细节,但本书没有参考文献附录(本书是教程,而不是参考书)。就像之前提到的一样,读者可以参考《Python Pocket Reference 》(O,Reilly) 还有其他书籍,以及免费的Python 参考手册(参看http://www.python.org )来了解语法和内置工具的细节。
书籍更新
本书在不断地进行完善(输入错误也包括在内)。本书的更新、补充以及更正会在下列任一网站进行更新维护。
http://www.oreilly.com/catalog/9780596513986/(O,Reilly 的本书的网页)
http://www.rmi.net/~lutz (作者的网站)
http://www.rmi.net/~lutz/about-lp.html (作者的关于本书的网页)
这三个URL 中的最后一个是关于本书的网页,我会在此发布更新,如果链接失效了,一定要进行Web 搜索。如果我更有洞察力,我会尽力,但网页的修改比印刷书籍要快得多。
关于本书的程序
本书和其中的所有程序的例子都是基于Python 2.5 版的。此外,虽然我没有试着预测未来,但是,在本书的编写过程中会讨论Python 3.0 版的一些概念。
然而,因为本书的重点是核心语言,可以相当肯定,多数内容在Python 以后的版本中不会有太多的变化。本书多数内容也适用于早期的Python 版本。当然,如果读者尝试使用在其所用版本之后增加的扩展功能,那当然行不通了。
原则就是,最新的Python 就是最好的Python 。因为本书重点是核心语言,多数内容也适用第2章提到的Jython (基于Java 的Python 语言实现)以及其他Python 的实现。
本书例子的源代码以及练习题的解答都可从本书网站获取:htt p :/ /www. o rei lly. com / catalog/9780596513986/ 。那么读者该怎样运行例子呢?本书会在第3章介绍运行的细节,稍后即可了解更多细节。
迎接Python 3.0
Python 3.0 的alpha 版在本书还没有出版前已经问世。确切地说,本书是基于Python 2.x 的版本系列(确切地说,就是2.5 版),也增加了很多有关即将发布的Python 3.0 版修改注解。
本书出版后的一年内,3.0 版都不会正式推出,而且至少两年内,也不会广泛地使用。然而,如果读者在3.0 广泛使用后挑选了本书,这一部分提供了读者将会遇到的这门语言的一些修改的简单说明,从而帮助读者顺利过渡。
虽然会有些例外,但是Python 3.0 版中的绝大部分内容都会和本书说明的相同,而且对典型和实际应用程序的冲击也会比较小。也就是说,本书介绍的Python 基础不会随新版本的发布而改变,并且读者在处理版本特定的细节前,先学习这些基础知识,自然受益匪浅。
不过,为了帮助读者以学转换代码,下列清单列出了Python 3.0 和之前版本相比的主要的差异。这一版的章节目标,不是介绍这些修改,就是介绍这些修改带来的影响,因此这份清单配合了相关的章节。有些修改已经可在Python 2.5 中编写,但有些还不行。因为下面的清单对多数读者而言都没有意义,所以我建议先学习本书,掌握Python 的基础知识,然后再回来看这份清单,从而了解Python 3.0 中的修改之处。在Python 3.0 中:
当前的execle() 内置函数已被移除;改用exec() (参考第3章)。
reload() 内置函数可能会被移除;它的替代函数尚未确定(参考第3章和第19 章)。
'X' 反引号字符串转换表达式已被移除:使用repr(X) (参考第5章)。
X<>Y 多余的不相等表达式已被移除:使用X != Y (参考第5章)。
集合可能以新的常量语法{1, 3, 2} 创建,相当于现在的set([1, 3, 2]) (参考第5 章)。
集合解析(set comprehension )可能写成:{f(x) for x in S if P(x)} ,相当于现在的生成器表达式:set(f(x) for x in S if P(x)) (参考第5章)。
已支持真除法:X/Y 一定会传回保留小数部分的浮点数,即使是对于整数应用的除法;使用X // Y 会启用当前的省略结果小数部分的除法(参考第5章)。
只有一种整数类型int ,它支持当前长整型数类型的任意精度(参考第5章)。
八进制和二进制常量:当前八进制数0666 会有错误:改用0o666 。而oct() 函数的结果也会随之发生改变;0b1010 现在等于10 ,而bin(10) 会传回"0b1010" (参考第5 章)。
字符串类型str 支持长字符Unicode 文本。新的bytes 类型会代表短字符字符串(例如,以二进制模式加载文件时);bytes 是小整数构成的可变序列,与str 的接口稍有不同(参考第7章)。
增加新的、选用的字符串格式化技术:"See {0}, {1} and {foo}".format("A", "B", foo="C") 会创建"See A, B and C" (参考第7章)。
字典D.has_key(X) 方法会被移除:改用X in D 成员关系(参考第4章和第8章)。
非数值的混合类型的比较(通过代理和排序函数)会引发异常,改用当前任意但固定的类型间次序(参考第8章和第9章)。
字典方法.keys() 、.items() 以及.values() 会返回类似于可迭代的“view ”对象,而不是列表;如果确实需要,使用list() 来强制创建列表(参考第8章)。
因为上点的改变,这种编写代码的模式不能再使用:k = D.keys(); k.sort();, 要改用k = sorted(D) (参考第4章和第8章)。
le() 内置函数可能会被移除;改用open() (参考第9章)。
内置函数raw_input() 会更名为input() ;使用eval(input()) 来实现现在的input() 函数的行为(参考第10 章)。
exec 程序代码字符串执行语句会再次变成内置函数(参考第10 章)。
as 、with 以及nonlocal 会变成新的保留字;因为上一点的改变,exec 不再是保留字(参考第11 章)。
print 变成函数从而支持更多功能,不再是语句:使用print(x, y) ,而不是print x, y,并且可以使用新函数的关键词参数,定制打印行为:le=sys.stdout, sep=" " 以及end="\n" (参考第11 章)。
扩展了迭代对象的拆包机制:现在可以用支持通用序列赋值的语句,例如a, b,
*rest = some_sequence ,就像*rest, a = stuff ;这样赋值语句左右两侧的元素数目不再必须匹配(参考第11 章)。
函数通过序列赋值而让元组参数自动解开的机制移除了;你不能再写def foo(a, (b, c)): ,而必须使用def foo(a, bc): b, c = bc 来明确进行序列赋值(参考第11 章,注2)。
目前的内置函数xrange() 更名为range() ;也就是说,只有range() (参考第13 章)。
在迭代器协议中,X.next() 方法更名为X.__next__() ,而新的内置函数next(X) 调用对象的X.__next__() 方法(参考第13 章和第17 章)。
内置函数zip() 、map() 以及filter() 会返回迭代器;使用list() 会强制创建列表作为结果(参考第13 章和第17 章)。
函数可以包括批注说明参数和结果(选用):def foo(x: "spam", y: list(range(3))) -> 42*2: 会在运行时附加在函数对象的foo.func_annotations 字典属性中:{'x': "spam", 'y': [0, 1, 2], "return": 84} (参考第15 章)。
注2: Python3.0 正式发布时,其语法应该是:def foo(a, b_c): b, c = b_c 。
新的nonlocal x, y语句可以让你写入读取嵌套函数作用域中的变量(参考第16 章)。
apply(func, args, kws) 函数会被移除;改用func(*args, **kws) 调用语法(参考第16 章和第17 章)。
reduce() 内置函数会被移除;改为使用本书所示的方法编写循环;lambda 、map() 以及lter() 在3.0 中保留(参考第17 章)。
所有导入默认将变成绝对导入,而且会跳过包的自身目录:使用新语法from . import name 将启用目前的相对导入(参考第21 章)。
所有类都会是新式类,而且会支持目前的新式扩展(参考第26 章)。
目前新式类所需要的类Spam(object) 派生将不再需要;在3.0 之中,当前独立的“经典”和衍生的”新式”类都会自动视为当前所谓的新式类(参考第26 章)。
在try 语句中,except name, value: 形式,将变成except name as value: (参考第27 章)。
在raise 语句中,raise E, V 必须写成raise E(V) ,从而明确地创建了实例(参考第27 章)。
本书描述的with/as 异常环境管理器功能已经启用了(参考第27 章)。
所有用户定义和内置的异常都被识别成类,不再是字符串(参考第28 章)。
用户定义的异常必须派生自内置的Bas eEx cepti on ,也就是异常层次的根(Exception 是其子类,作为你的根类足够了);内置的StandardException 类已被移除(参考第28 章)。
标准库的包结构发生实质性的重新组织(参考Python 3.0 版的发布注解)。
虽然这份清单乍一看有些令人害怕,但记住,本书说明的多数核心Python 语言与Python
3.0 都是完全相同的。事实上,上面多数的内容都是相当琐碎的细节,不会对程序员有太多影响。
此外,注意在本书编写时,这份清单仍然是在不确定的,最终可能不完整也不准确,所以一定要看看Python 3.0 的发布注解,从而了解官方的说明。如果你已经使用Python 2.x 版本系列编写代码了,也可以看一看“2to3 ”这个自动把Python 2.x 转换为Python 3.0 代码的转换脚本(Python 3.0 会提供)。
关于此系列
O, R e i l l y 学习丛书,是面向任何想通过系统的学习来掌握新技能的读者所编写和设计的。本系列的每本书都使用了我们(通过你们的帮助)认为最佳的学习原理,让读者能学到新项目的知识,从而能够完成经理要求的出乎意料的任务,或者迅速地学习新语言。
要善用学习手册系列的任何一本书,建议读者依次读完每一章,就会发现,阅读每章的标题就可以对这一章的内容有一个概览。读者也可以使用摘要,事先看一看每章的重点,并复习已学过的内容。最后,为了帮助读者精通每一章的内容,我们还附加了一节头脑风暴,其中包含了习题。每一部分也有实用的练习题。
学习丛书会伴随在读者身旁,就像你值得信赖的同事或导师一样,我们努力要让读者的学习体验更为愉快。请告诉我们你的评价,无论是赞赏、批评或改进的建议,都可寄给learning@oreilly.com 。
使用代码示例
本书的目的是帮助读者把工作做好。一般来说,读者可以在程序和文档中使用本书的代码,不需要联系我们取得许可,除非是要重新发布大量的代码。例如,编写程序时,使用本书好几段代码,就需要许可。销售和分发O,Reilly 范例光盘也需要许可。引用本书和例子程序来回答问题,不需要许可。把本书大量例子程序整合到自己的产品文档中则需要许可。
虽然并非必须,但我们会感谢那些标明所有权的行为。所有权通常包括标题、作者、出版社以及ISBN 。例如,“Learning Python, Third Edition, by Mark Lutz. Copyright 2008 O,Reilly Media Inc., 978-0-596-51398-6. ”。
如果读者觉得对程序例子的运用超出合理使用或者上列许可情况之外,可以与我们联系:permissions@oreilly.com 。
体例
下面是本书关于印刷字体方面的一些约定:
斜体(Italic) 用于电子信箱、URL 、文件名、路径名以及用于强调第一次介绍的新的术语。
等宽字体(Constant width) 用于文件内容以及命令输出,来表示模块、方法、语句以及命令。
定宽粗体(Constant width bold) 用于程序代码段,来显示应该由用户输入的命令或文字,有时则用于强调程序代码的一部分。
定宽斜体(Constant width italic) 用于程序代码段中可替换的部分以及一些注释。<等宽字体>(<Constant width>) 表示应该以真实程序代码取代的语法单元。
注意: 表示和附近文字相关的技巧、建议或一般性注释。
警告: 表示和附近文字相关的警告和注意事项。
本书例子中,系统命令行开头的%字符指的是系统提示符,这得取决于读者的机器(例如,DOS 窗口是C:\Python25> )。不要自行输入%字符。同样,在解释器交互模式下所列出的内容中,也不要输入每行开头的>>> 和... 字符,这些是Python 显示的提示符。只要输入这些提示符之后的文字就行了。为了帮助你记住这一点,本书中的用户输入都将以粗体显示。此外,一般也不需要输入列表中以#开头的文字,这些是注释,不是可执行的代码。
联系方式
关于本书的批评建议和相关问题请使用如下地址与出版社联系:
美国:
O,Reilly Media, Inc.
1005 Gravenstein Highway North
Sebastopol, CA 95472
中国:
北京市西城区西直门南大街2号成铭大厦C座807 室(100035)
奥莱利技术咨询(北京)有限公司我们为本书提供了一个网页,在此页面中我们列出了勘误表、示例以及所有其他信息。
读者可以登录以下网址访问该页面:
http://www.oreilly.com/catalog/9780596513986 (英文版)
http://www.oreilly.com.cn/book.phpbn=978-7-111-26776-8 (中文版)
要对本书发表评论或咨询相关技术问题,请发电子邮件至:
bookquestions@oreilly.com
要了解我们的书籍、会议、资源中心以及O,Reilly Network 的详细信息,请访问以下网址:
http://www.oreilly.com
http://www.oreilly.com.cn
书籍链接的更新,请参考本书前言提到的相关链接。
致谢
当我在2007 年写本书第三版时,我总是抱着某种“完成任务”的心态。我已经使用并推广Python 15 年了,而且也已经有10 年Python 的培训经验了。尽管随着时间和世事的流逝,我依然惊讶于Python 这些年来的成功。Python 的成长,是我们多数人在1992 年时难以想象的。所以,也许我得冒着被当成无可救药、固执己见的作者的风险,但是请你谅解一下,我得在这里说一说回忆、恭贺以及感谢的话。
这是漫长而崎岖的道路。今日回首,1992 年当我第一次发现Python 的时候,我根本不知道它对我未来15 年的生活会有什么影响。1995 年编写《Programming Python 》第一版后的两年,我开始在全国和全世界旅行,为初学者和专家培训Python 。从1999 年完成本书第一版后,我成为了全职、独立的Python 培训师和作家;这得益于Python 指数级增长的受欢迎程度。
我在2007 年写下这些话时,已经编写了9本Python 书籍;我培训Python 已经超过10 年了,而且在美国、欧洲、加拿大以及墨西哥教过200 多个Python 短期培训课程,在此过程中遇到了超过3 000 位以上的学生。除了频繁地累计飞行里程,这些课程也帮助我精炼本书以及其他Python 书籍的内容。几年下来,教学磨练了书籍,而书籍又反过来磨练了教学。事实上,你读的这本书的大部分内容都源于我的课程。
因此,我想要感谢过去10 年来参加我课程的所有学生。除了Python 本身的变化之外,你们的反馈对本书的出版,也扮演了重要角色(没有比看3 000 位学生重复犯初学者的错误更有启发性的事了)。本版的修正主要根据2003 年后的课程,不过,从1997 年起的每堂课,都对本书的精炼有或多或少的帮助。我要特别感谢那些在都柏林、墨西哥城、巴塞罗那、伦敦、埃德蒙顿以及波多黎各举办课程的那些客户;无法想象有更好的培训地点了。
我也想对每一位参与本书制作的人表示感谢。参与这个项目的编辑:这一版的Tat iana Apandi ,以及前几版的许多人。感谢Liza Daly 负责本书的技术校对。感谢O’Reilly 让我有这个机会写出这9本书;真的很有趣(感觉上有点像电影《偷天情缘(Groundhog Day )》)。
我想感谢最初的共同作者David Ascher 对本书前几版的帮助。David 在前几版中贡献了“外层”部分,但是在本版中,为了让新的核心语言素材多一点空间,我们不得不忍痛割爱了。我在本版中加了一些更高级的程序,作为自学的最终练习,但是,这无法弥补删去的所有内容的缺憾。如果你难以忘怀那些内容,可以参考序中前边关于应用层面的内容的相关说明。
创造了如此有趣和实用的语言,我得特别感谢Guido van Rossum 和Python 社区的人们。就像多数开源系统一样,Python 是许多英雄努力的结果。拥有了15 年的Python 编程经验,我依然觉得Python 相当有趣。我特别荣幸看到了Python 从脚本语言的初级阶段成长为广泛使用的工具,几乎每个编写软件的组织都以某种方式在部署使用它。这是令人兴奋的结果,我想感谢并祝贺整个Python 社区,你们做了件很美妙的事。
我也想感谢在O’Reilly 原先的编辑:已故的Frank Willison 。这本书大部分都是Frank 的想法,反映出他那充满感染力的愿景。回首往事,Frank 对我的职业生涯以及Python 本身都有很深远的影响。Python 刚出现时拥有这么多的乐趣并如此成功,可以说,这都归功于Frank ,一点都不夸张。我们还是很想念他。
最后,还有些人要感谢。感谢OQO 这么好的玩具。感谢已故的Carl Sagan ,让来自威斯康星州的18 岁小伙子得到了启发。感谢Jon Stewart 和Michael Moore 这些爱国者。感谢我这几年遇到的所有大型公司,提醒我自己有多么的幸运,可以为自己打工。
感谢我的孩子Mike 、Sammy 以及Roxy ,无论他们将来选择做什么。我开始用Python 时,你们都还小,而你们似乎也这样长大了;我以你们为荣。生活会让我们一路走下去,但是总会有回家的路。
最需要感谢的是Vera ,我最好的朋友、女友以及妻子。我美妙的日子就是我终于遇见你的那一天。我不知道接下来50 年会怎样,但我知道,我想把所有时间都用来拥抱你。...
-Mark Lutz Berthoud,Colorado
2007 年7月