书籍更新 大彭两 本书在不断地进行完善(输入错误也包括在内)。本书的更新、补充以及更正会在下列 任一网站进行更新维护。 htte:/w。 oreilly. com/catalog/9780596513986/( O'Reilly的本书的网页) htt/ vww.rminel/~lutz(作者的网站) htt:/www.rmi.net//-lutz/about-lp.html(作者的关于本书的网页) 这三个URL中的最后一个是关于本书的网页,我会在此发布更新,如果链接失效了, 定要进行web搜索。如果我更有洞察力,我会尽力,但网页的修改比印刷书籍要快得 关于本书的程序 本书和其中的所有程序的例子都是基于 Python25版的。此外,虽然我没有试着预测未 来,但是,在本书的编写过程中会讨论 Python30版的一些概念。 然而,因为本书的重点是核心语言,可以相当肯定,多数内容在 Python以后的版本中不 会有太多的变化。本书多数内容也适用于早期的 Python版本。当然,如果读者尝试使用 在其所用版本之后增加的扩展功能,那当然行不通了。 原则就是,最新的 Python就是最好的 Python。因为本书重点是核心语言,多数内容也适 用第2章提到的 othon(基于Java的 Python语言实现)以及其他 Python的实现。 本书例子的源代码以及练习题的解答都可从本书网站获取:htt:/w.oreilly.com catalog/9780596513986/。那么读者该怎样运行例子呢?本书会在第3章介绍运行的细 节,稍后即可了解更多细节。 迎接 Python3 Python3.0的 alpha版在本书还没有出版前已经问世。确切地说,本书是基于 Python2x的 版本系列(确切地说,就是2.5版),也增加了很多有关即将发布的 Python30版修改注 解。 本书出版后的一年内,30版都不会正式推出,而且至少两年内,也不会广泛地使用。然 而,如果读者在30广泛使用后挑选了本书,这一部分提供了读者将会遇到的这门语言的 一些修改的简单说明,从而帮助读者顺利过渡。 8|前言 www.topsage.com
www.TopSage.com
虽然会有些例外,但是 Python30版中的绝大部分内容都会和本书说明的相同,而且对 典型和实际应用程序的冲击也会比较小。也就是说,本书介绍的 Python基础不会随新版 本的发布而改变,并且读者在处理版本特定的细节前,先学习这些基础知识,自然受益 不过,为了帮助读者以学转换代码,下列清单列出了 Python30和之前版本相比的主要 的差异。这一版的章节目标,不是介绍这些修改,就是介绍这些修改带来的影响,因此 这份清单配合了相关的章节。有些修改已经可在 Python25中编写,但有些还不行。因 为下面的清单对多数读者而言都没有意义,所以我建议先学习本书,掌握 Python的基础 知识,然后再回来看这份清单从而了解 Python30中的修改之处。在 Python30中 当前的exec61e(内置函数已被移除;改用exec()(参考第3章)。 reload()内置函数可能会被移除;它的替代函数尚未确定(参考第3章和第19 Xx反引号字符串转换表达式已被移除:使用repr(X)(参考第5章) ·Ⅹ<〉Y多余的不相等表达式已被移除:使用XI=Y(参考第5章 集合可能以新的常量语法{1,3,2}创建,相当于现在的set([1,3,2])(参考第5 章) ··集合解析( set comprehension)可能写成:{f(x)forx" in s if p(x)},相当于现 在的生成器表达式:set(f(x) for x in s if p(x))(参考第5章) 已支持真除法:X/Y定会传回保留小数部分的浮点数,即使是对于整数应用的除 法;使用X∥/Y会启用当前的省略结果小数部分的除法(参考第5章 只有一种整数类型int,它支持当前长整型数类型的任意精度(参考第5章) 八进制和二进制常量:当前八进制数066会有错误:改用00666而oct()函数的 结果也会随之发生改变;0b1010现在等于10,而bin(10)会传回"0b100”(参考第5 字符串类型str支持长字符 Unicode文本。新的 bytes类型会代表短字符字符串(例 如,以二进制模式加载文件时); bytes是小整数构成的可变序列,与str的接口稍 有不同(参考第7章)。 增加新的、选用的字符串格式化技术:"see0},{1} and (foo}" format("A","B foo="C")会创建"SeeA, B and C"(参考第7章)。 字典 ). has key(x)方法会被移除:改用XinD成员关系(参考第4章和第8章)。 前言|9 www.iopsage.com
www.TopSage.com
·非数值的混合类型的比较(通过代理和排序函数)会引发异常,改用当前任意但固 定的类型间次序(参考第8章和第9章)。 宇典方法keys()、,ems(以及va】ues()会返回类似于可迭代的“vew”对象 而不是列表;如果确实需要,使用]ist()来强制创建列表(参考第8章)。 因为上点的改变,这种编写代码的模式不能再使用:k=D.keys();k.sort(); 要改用k= sorted(D)(参考第4章和第8章) file()内置函数可能会被移除;改用open()(参考第9章)。 内置函数 raw input()会更名为 input();使用eva1( input())来实现现在的 input() 函数的行为(参考第10章) exec程序代码字符串执行语句会再次变成内置函数(参考第10章) as、wih以及non10ca1会变成新的保留字;因为上一点的改变,exec不再是保留字 (参考第11章)。 print变成函数从而支持更多功能,不再是语句:使用 print(x,y),而不是 print x, y,并且可以使用新函数的关键词参数,定制打印行为:file=sy5, stdout,sep="以 及end="\n"(参考第11章)。 扩展了迭代对象的拆包机制:现在可以用支持通用序列赋值的语句,例如a,b *rest=some_ sequence,就像*rest,a=Stu仟f;这样赋值语句左右两侧的元素数 目不再必须匹配(参考第11章)。 ·函数通过序列赋值而让元组参数自动解开的机制移除了;你不能再写 def foo(a, (b,c)∷,而必须使用 def foo(a,bc):b,c=bc来明确进行序列赋值(参考第11 章,注2)。 ·目前的内置函数 xrange()更名为 range();也就是说,只有 range()(参考第13 章)。 在迭代器协议中, X next0方法更名为X.next(),而新的内置函数next(x)调用 对象的X.next()方法(参考第13章和第17章)。 内置函数zip()、map(以及 filter()会返回选代器;使用1ist()会强制创建列表作为 结果(参考第13章和第17章) 函数可以包括批注说明参数和结果(选用): de f foo(x:"spam",y: list( range(3))->42*2:会在运行时附加在函数对象的foo,func_ annotations宇典 属性中:{"x':"spam",'y':[o,1,2]," return":84}(参考第15章)。 Python3.0正式发布时,其语法应该是: def foo(a,bc);b,cabc。 10.|前言 www.iopsage.com
www.TopSage.com
新的non1oca1x,y语句可以让你写入读取嵌套函数作用域中的变量(参考第16 章) apply(func,args,kws)函数会被移除;改用fmc(*arg5,+k)调用语法(参考)m 第16章和第17章)。 reduce()内置函数会被移除;改为使用本书所示的方法编写循环;1 ambda、map()以 及 filter()在30中保留(参考第17章)。 所有导入默认将变成绝对导入,而且会跳过包的自身目录:使用新语法from import name将启用目前的相对导入(参考第2章)。 所有类都会是新式类,而且会支持目前的新式扩展(参考第26章)。 目前新式类所需要的类span( object派生将不再需要;在30之中,当前独立的“经 典”和衍生的”新式”类都会自动视为当前所谓的新式类(参考第26章)。 在try语句中, except name, value:形式,将变成 except name as value:(参考第 27章)。 在 raise语句中, raise E,V必须写成 raise E(Ⅵ),从而明确地创建了实例(参考第 27章)。 本书描述的ith/as异常环境管理器功能已经启用了(参考第27章)。 ·所有用户定义和内置的异常都被识别成类,不再是字符串(参考第28章)。 用户定义的异常必须派生自内置的 Baseexception,也就是异常层次的根 ( Exception:是其子类,作为你的根类足够了);内置的 StandardException类已被 移除(参考第28章)。 标准库的包结构发生实质性的重新组织(参考 Python30版的发布注解)。 虽然这份清单乍一看有些令人害怕,但记住,本书说明的多数核心 Python语言与 Python 30都是完全相同的。事实上,上面多数的内容都是相当琐碎的细节,不会对程序员有太 多影响 此外,注意在本书编写时,这份清单仍然是在不确定的,最终可能不完整也不准确,所 以一定要看看 Python3.0的发布注解,从而了解官方的说明。如果你已经使用 Python2x 版本系列编写代码了,也可以看一看“2to3”这个自动把 Python2x转换为 Python30代 码的转换脚本( Python30会提供)。 www.topsage.com 前言|11
www.TopSage.com
关于此系列 O'Reilly学习丛书,是面向任何想通过系统的学习来掌握新技能的读者所编写和设计 的。本系列的每本书都使用了我们(通过你们的帮助)认为最佳的学习原理,让读者能 学到新项目的知识,从而能够完成经理要求的出乎意料的任务,或者迅速地学习新语 言。 要善用学习手册系列的任何一本书,建议读者依次读完每一章,就会发现,阅读每章的 标题就可以对这一章的内容有一个概览。读者也可以使用摘要,事先看一看每章的重 点,并复习已学过的内容。最后,为了帮助读者精通每一章的内容,我们还附加了一节 头脑风暴,其中包含了习题。每一部分也有实用的练习题。 学习丛书会伴随在读者身旁,就像你值得信赖的同事或导师一样,我们努力要让读者的 学习体验更为愉快。请告诉我们你的评价,无论是赞赏、批评或改进的建议,都可寄给 learning@oreilly.com。 使用代码示例 本书的目的是帮助读者把工作做好。一般来说,读者可以在程序和文档中使用本书的代 码,不需要联系我们取得许可,除非是要重新发布大量的代码。例如,编写程序时,使 用本书好几段代码,就需要许可。销售和分发 OReilly范例光盘也需要许可。引用本书 和例子程序来回答问题,不需要许可。把本书大量例子程序整合到自己的产品文档中则 需要许可 虽然并非必须,但我们会感谢那些标明所有权的行为。所有权通常包括标题、作者、出 版社以及ISBN。例如,“ Learning Python, Third Edition, by Mark Lutz. Copyright2008 OReilly Media Inc,978-0-596-51398-6."。 如果读者觉得对程序例子的运用超出合理使用或者上列许可情况之外,可以与我们联 系:permissions@oreilly.com。 体例 下面是本书关于印刷字体方面的一些约定 斜体( italic) 用于电子信箱、URL、文件名、路径名以及用于强调第一次介绍的新的术语。 前言 www.iopsage.com
www.TopSage.com