深入 Python :Dive Into Python 中文版

Python 从新手到专家 [Dip_5.4b_CPyUG_Release]

Mark Pilgrim

华蟒用户组 Chinese Python User Group, CPyUG


法律通告

Permission is granted to copy, distribute, and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in Appendix G, GNU Free Documentation License.

允许在 GNU 自由文档协议 (1.1 版,或自由软件基金会出版的任何更新版本) 的许可下复制、发行且/或修改本文档;本文档没有不变部分,没有前封面文本,没有封底文本。该协议的一份中文版参考译文包含在 附录 H, GNU 自由文档协议 中。

在这本书中的例程是自由软件。你可以在遵守 Python 协议 (Python 软件基金会发布) 条款的规定下,重新发布,且/或修改它们。在 附录 I, Python license 中包含了此协议的一份拷贝。

本译本由 Zoom.Quiet 负责项目管理。感谢啄木鸟社区提供 SVN 项目空间Wiki 协作空间

本译本由 啄木鸟/CPUG 的 obp 团队完成。可以在附录 E, 修订历史中找到一个翻译和修订人员的清单。如果您对当前版本的 Dive Into Python 中文版有任何意见和建议,可以到本书的 Wiki 协作空间中留下你的评论。

本译文遵守 GFDL 的规定。你可以复制、发行、修改此文档,但请保留此版权信息。

审校 (5.4b):2007 年 6 月—9 月

译文版 (5.4):2005 年 12 月—2006 年 4 月 (update-060425)

英文原版 (5.4):2004 年 5 月 20 日

修订历史
修订 5.4b, r22092008-01-27
修订 5.4b2007-09-01
  • XiaQ (xiaqqaix AT gmail DOT com) 进行了 Dive Into Python 中文版的修订工作,重发布为 5.4b 版。可以在 Dive Into Python 中文版的项目主页上找到一份完整的 (同时也是极其冗长的) 修订清单。注意原英文版不含 5.4b 版。

修订 5.4 中文版2006-04-25
参加了 Dive Into Python 中文版 5.4 版翻译的有:
  • limodou (limodou AT gmail DOT com)

  • Zoom.Quiet (zoom.quiet AT gmail DOT com)

  • Jason Xie (jason AT sinoesl DOT org)

  • YuLin (yulin724 AT gmail DOT com)

  • Weigang LI (dimens AT gmail DOT com)

  • wolfg (wolfg1969 AT gmail DOT com)

  • Osmond (sinosmond AT gmail DOT com)

修订 5.42004-05-20
修订 5.32004-05-12
修订 5.22004-05-09
修订 5.12004-05-05
修订 5.02004-04-16
修订 4.92004-03-25
修订 4.82004-03-25
修订 4.72004-03-21
修订 4.62004-03-14
修订 4.52004-03-07
修订 4.42003-10-08
修订 4.32003-09-28
修订 4.2.12003-09-17
  • 修正了主页中的链接。

  • 修复了语法高亮。

修订 4.22003-09-12
修订 4.12002-07-28
修订 4.0-22002-04-26
修订 4.02002-04-19
修订 3.92002-01-01
修订 3.82001-11-18
修订 3.72001-09-30
修订 3.6.42001-09-06
修订 3.6.32001-09-04
修订 3.6.22001-08-31
修订 3.62001-08-31
  • 完成了 第 8 章 HTML 处理;在其末尾添加了 第 8.9 节 “全部放在一起”第 8.10 节 “小结”

  • 添加了 第 15.4 节 “后记”

  • 第 9 章 XML 处理 开头添加了 第 9.1 节 “概览”

  • 第 16 章 函数编程 开头添加了 第 16.1 节 “概览”

  • 修正了一个长期存在的 bug:第 8 章 HTML 处理 中的示例被错误地着色了。

  • 添加了指向 法文版 的链接。他们做对了:他们翻译了 XML 源文件,这样我的构建脚本得以重用,他们的成果就可以用六种格式发布。

  • 升级到 DocBook XSL 1.43 版的样式表。

  • 升级到 由 Michael Kay 编制的 SAXON XSLT 解析器 6.43 版。

  • 对样式表进行了大规模翻修:放弃了原来的基于表格的排版,转向层叠样式表。不幸的是, CSS 总是会出兼容性问题,所以在每个页面的首尾部分都保留的表格。编译后的 HTML 版本在 Netscape 4 看起来更糟糕了;但在大多数现代浏览器中――包括 Netscape 6、MozillaInternet Explorer 5、Opera 5、KonqueroriCab――中表现良好。在 Lynx 中完全可读。我爱 Lynx!它是我使用的第一个浏览器。你永远不会忘记你的第一次。

  • 迁移到 Ant 平台上,以便控制进程――我现在可是在六种格式和两种语言中探险。

  • 整理了所有的下载档案;这之前我为每个平台都发布了不同的文件,因为 Pythonzipfile 模块创建的 .zip 文件不标准,因此不能被 Mac OS 上的 Aladdin Expander 打开。但 Ant 创建的 .zip 完全标准,兼容性良好。好样的,Ant

  • 我们把 XML 源、XSL 样式表和相关的脚本和库放在了 SourceForge。对于喜欢冒险的人们,当然有 CVS 接入。

  • 在与 GPL 调和的 Python 2.1.1 license 下重新发布了代码。感谢你,Guido;人们确实关心,而它确实要紧。

修订 3.52001-06-26
修订 3.42001-05-31
修订 3.32001-05-24
修订 3.22001-05-03
修订 3.12001-04-18
  • BaseHTMLProcessor.py 添加处理声明的代码;现在 Python 2.1 也支持这段代码了。

  • 添加 第 8.5 节 “localsglobals 中关于嵌套作用域的注解。

  • 修正了 例 8.1 “BaseHTMLProcessor.py 中的一个隐秘的 bug:带有字符实体的属性值不会被合适地转义。

  • 对于本书中的示例,现在推荐 (并不要求) Python 2.1,因为它支持 sgmllib.py 中的声明。

  • 更新了 主页 上的链接,使其指向已经发布的 Python 2.1。

  • 给文件加上了时间戳,以帮助重发布这本书的人们。

修订 3.02001-04-16
修订 2.92001-04-13
修订 2.82001-03-26
修订 2.72001-03-16
修订 2.62001-02-28
  • PDFWord 版本加入了彩色的示例文本、改进后的目录,以及缩进良好的 tipnote

  • 现在 Word 版本是正宗的 Word 格式了,与 Word 97 完全兼容。

  • 部分地解决 PDF 和纯文本版本中的特殊字符 (像 TM 符号和花括号) 错误的问题。

  • 添加了指向支持 UNIXWord 版本的下载链接――有些小鬼想把它导入到 StarOffice 或其它什么环境中去。

  • 修正了几个丢失标题的 注记

  • 修正了一个 bug:它会导致 Internet Explorer 5 for Mac OS 示例中的彩色文字发生字体错乱。(你好?!?Microsoft?好,你倒说说看,到底是 <pre> 的哪一部分你不懂?)

  • 修复了 Mac OS 档案的下载链接。

  • 在每章的第一个示例程序前,都添加了下载示例程序的链接。(我的日志显示人们往往会跳过本可以下载它们的那两个页面 (即: 主页 和序言),然后在阅读时惊慌失措地寻找下载地址。)

  • 进一步紧缩了 主页 和序言――但愿人们不会再因为其杂乱不堪而跳过它们。

  • 但愿早点结束这没完没了的调试,回到写作正轨。

修订 2.52001-02-23
修订 2.4.12001-02-12
  • 修改了新闻组链接,使用了 news: 协议。deja.com 已死。

  • 在下载链接旁标明了文件大小。

修订 2.42001-02-12
  • 为大多数章节添加了 进一步阅读,并在 附录 A, 进一步阅读 中汇总。

  • 在纯文本格式的外部链接旁添加了 URL 地址。

修订 2.32001-02-09
修订 2.22001-02-02
  • 编辑了 第 4.4 节 “通过 getattr 获取对象引用”

  • xref 标记添加了标题,所以它们也能显示可爱的提示框了。

  • 修改了修订历史页面的主题风格。

  • 修正了我昨天在我的 HTML 中提到的 bug:后期处理脚本将会导致无效的 HTML 字符引用,甚至让一些浏览器无法显示。

  • 升级到 DocBook XSL 样式表 1.29 版。

修订 2.12001-02-01
修订 2.02001-01-31
修订 1.92001-01-15
修订 1.82001-01-12
修订 1.712001-01-03
  • 对样式表进行了几处修改,提高了对浏览器的兼容性。

修订 1.72001-01-02
修订 1.62000-12-11
修订 1.52000-11-22
修订 1.42000-11-14
修订 1.32000-11-09
  • 添加了关于动态代码执行的部分。

  • 在所有有必要的地方,都添加了对本书其它部分的引用链接。

  • 扩写了 第 2 章概览,解释了这个函数的实际作用。

  • 显示地声明示例代码是在 GNU General Public License 下发布的;添加了该 License 的附录。 [Note 8/16/2001:代码在与 GPL 调和的 Python license 下重新发布了。]

  • 修改了链接,以使用 xref 标记――我弄明白怎么使用了这个标记了。

修订 1.22000-11-06
  • 添加了第 2 章的前四部分。

  • 进一步紧缩了了序言,并添加了指向 PythonMac OS 版本的链接。

  • 扩写了“映射列表”和“连接字符串”中的示例,使其更富逻辑性。

  • 添加了第 1 章小结中的输出。

修订 1.12000-10-31
  • 完成了第 1 章关于映射、连接的部分,以及整章小结。

  • 在序言使用了较缓和的措辞,并添加了针对非程序员的入门教程的链接。

  • 修正了几处拼写错误。

修订 1.02000-10-30
  • 原始发布

本书存放在 http://diveintopython.org/ (英文原版) 和 http://www.woodpecker.org.cn/diveintopython(中文版)。如果你是从别的地方看到它的,可能看到的不是最新版本。


1. 第 1 章
1.1. 哪一种 Python 适合您?
1.2. Windows 上的 Python
1.3. Mac OS X 上的 Python
1.4. Mac OS 9 上的 Python
1.5. RedHat Linux 上的 Python
1.6. Debian GNU/Linux 上的 Python
1.7. 从源代码安装 Python
1.8. 使用 Python 的交互 Shell
1.9. 小结
2. 第 2 章
2.1. 概览
2.2. 函数声明
2.2.1. Python 和其他编程语言数据类型的比较
2.3. 文档化函数
2.4. 万物皆对象
2.4.1. 模块导入的搜索路径
2.4.2. 何谓对象?
2.5. 代码缩进
2.6. 测试模块
3. 第 3 章
3.1. Dictionary 介绍
3.1.1. Dictionary 的定义
3.1.2. Dictionary 的修改
3.1.3. 从 dictionary 中删除元素
3.2. List 介绍
3.2.1. List 的定义
3.2.2. 向 list 中增加元素
3.2.3. 在 list 中搜索
3.2.4. 从 list 中删除元素
3.2.5. 使用 list 的运算符
3.3. Tuple 介绍
3.4. 变量声明
3.4.1. 变量引用
3.4.2. 一次赋多值
3.5. 格式化字符串
3.6. 映射 list
3.7. 连接 list 与分割字符串
3.7.1. 字符串方法的历史注解
3.8. 小结
4. 第 4 章
4.1. 概览
4.2. 使用可选参数和命名参数
4.3. 使用 typestrdir 和其它内置函数
4.3.1. type 函数
4.3.2. str 函数
4.3.3. 内置函数
4.4. 通过 getattr 获取对象引用
4.4.1. 用于模块的 getattr
4.4.2. getattr 作为一个分发者
4.5. 过滤列表
4.6. andor 的特殊性质
4.6.1. 使用 and-or 技巧
4.7. 使用 lambda 函数
4.7.1. 真实世界中的 lambda 函数
4.8. 全部放在一起
4.9. 小结
5. 第 5 章
5.1. 概览
5.2. 使用 from module import 导入模块
5.3. 类的定义
5.3.1. 初始化并开始类编码
5.3.2. 了解何时去使用 self__init__
5.4. 类的实例化
5.4.1. 垃圾回收
5.5. 探索 UserDict:一个封装类
5.6. 专用类方法
5.6.1. 获得和设置数据项
5.7. 高级专用类方法
5.8. 类属性介绍
5.9. 私有函数
5.10. 小结
6. 第 6 章
6.1. 异常处理
6.1.1. 为其他用途使用异常
6.2. 与文件对象共事
6.2.1. 读取文件
6.2.2. 关闭文件
6.2.3. 处理 I/O 错误
6.2.4. 写入文件
6.3. for 循环
6.4. 使用 sys.modules
6.5. 与目录共事
6.6. 全部放在一起
6.7. 小结
7. 第 7 章
7.1. 概览
7.2. 个案研究:街道地址
7.3. 个案研究:罗马字母
7.3.1. 校验千位数
7.3.2. 校验百位数
7.4. 使用 {n,m} 语法
7.4.1. 校验十位数和个位数
7.5. 松散正则表达式
7.6. 个案研究:解析电话号码
7.7. 小结
8. 第 8 章
8.1. 概览
8.2. sgmllib.py 介绍
8.3. 从 HTML 文档中提取数据
8.4. BaseHTMLProcessor.py 介绍
8.5. localsglobals
8.6. 基于 dictionary 的字符串格式化
8.7. 给属性值加引号
8.8. dialect.py 介绍
8.9. 全部放在一起
8.10. 小结
9. 第 9 章
9.1. 概览
9.2. 包
9.3. XML 解析
9.4. Unicode
9.5. 搜索元素
9.6. 访问元素属性
9.7. Segue
10. 第 10 章
10.1. 抽象输入源
10.2. 标准输入、输出和错误
10.3. 查询缓冲节点
10.4. 查找节点的直接子节点
10.5. 根据节点类型创建不同的处理器
10.6. 处理命令行参数
10.7. 全部放在一起
10.8. 小结
11. 第 11 章
11.1. 概览
11.2. 避免通过 HTTP 重复地获取数据
11.3. HTTP 的特性
11.3.1. 用户代理 (User-Agent)
11.3.2. 重定向 (Redirects)
11.3.3. Last-Modified/If-Modified-Since
11.3.4. ETag/If-None-Match
11.3.5. 压缩 (Compression)
11.4. 调试 HTTP web 服务
11.5. 设置 User-Agent
11.6. 处理 Last-ModifiedETag
11.7. 处理重定向
11.8. 处理压缩数据
11.9. 全部放在一起
11.10. 小结
12. 第 12 章
12.1. 概览
12.2. 安装 SOAP 库
12.2.1. 安装 PyXML
12.2.2. 安装 fpconst
12.2.3. 安装 SOAPpy
12.3. 步入 SOAP
12.4. SOAP 网络服务查错
12.5. WSDL 介绍
12.6. 以 WSDL 进行 SOAP 内省
12.7. 搜索 Google
12.8. SOAP 网络服务故障排除
12.9. 小结
13. 第 13 章
13.1. 罗马数字程序介绍 II
13.2. 深入
13.3. romantest.py 介绍
13.4. 正面测试 (Testing for success)
13.5. 负面测试 (Testing for failure)
13.6. 完备性检测 (Testing for sanity)
14. 第 14 章
14.1. roman.py, 第 1 阶段
14.2. roman.py, 第 2 阶段
14.3. roman.py, 第 3 阶段
14.4. roman.py, 第 4 阶段
14.5. roman.py, 第 5 阶段
15. 第 15 章
15.1. 处理 bugs
15.2. 应对需求变化
15.3. 重构
15.4. 后记
15.5. 小结
16. 第 16 章
16.1. 概览
16.2. 找到路径
16.3. 重识列表过滤
16.4. 重识列表映射
16.5. 数据中心思想编程
16.6. 动态导入模块
16.7. 全部放在一起
16.8. 小结
17. 第 17 章
17.1. 概览
17.2. plural.py, 第 1 阶段
17.3. plural.py, 第 2 阶段
17.4. plural.py, 第 3 阶段
17.5. plural.py, 第 4 阶段
17.6. plural.py, 第 5 阶段
17.7. plural.py, 第 6 阶段
17.8. 小结
18. 第 18 章
18.1. 概览
18.2. 使用 timeit 模块
18.3. 优化正则表达式
18.4. 优化字典查找
18.5. 优化列表操作
18.6. 优化字符串操作
18.7. 小结
A. 进一步阅读
B. 五分钟回顾
C. 技巧和窍门
D. 示例清单
E. 修订历史
F. 关于本书
G. GNU Free Documentation License
G.0. Preamble
G.1. Applicability and definitions
G.2. Verbatim copying
G.3. Copying in quantity
G.4. Modifications
G.5. Combining documents
G.6. Collections of documents
G.7. Aggregation with independent works
G.8. Translation
G.9. Termination
G.10. Future revisions of this license
G.11. How to use this License for your documents
H. GNU 自由文档协议
H.0. 序
H.1. 适用范围和定义
H.2. 原样复制
H.3. 大量复制
H.4. 修改
H.5. 合并文档
H.6. 文档合集
H.7. 独立著作聚集
H.8. 翻译
H.9. 终止协议
H.10. 协议将来的修订
H.11. 如何为你的文档使用本协议
I. Python license
I.A. History of the software
I.B. Terms and conditions for accessing or otherwise using Python
I.B.1. PSF license agreement
I.B.2. BeOpen Python open source license agreement version 1
I.B.3. CNRI open source GPL-compatible license agreement
I.B.4. CWI permissions statement and disclaimer
J. Python 协议
J.0. 关于译文的声明
J.A. 软件的历史
J.B. 使用 Python 的条款和条件
J.B.1. PSF 协议
J.B.2. BeOpen Python 开源协议第 1 版
J.B.3. CNRI 开源 GPL 兼容协议
J.B.4. CWI 许可声明与免责声明
n
Next Page
p
Previos Page
h
Book Home
u
Go Up One Level
?
Press ? for Help
esc
Hide Help
Your Ad Here