# 附录 E. 修订历史
## 2007-09-01 (5.4b)
* XiaQ (xiaqqaix AT gmail DOT com) 进行了 Dive Into Python 中文版的修订工作,重发布为 5.4b 版。可以在 Dive Into Python 中文版的[项目主页](http://wiki.woodpecker.org.cn/moin/DiveIntoPythonZh)上找到一份完整的 (同时也是及其冗长的) 修订清单。注意原英文版不含 5.4b 版。
## 2006-04-25 (5.4 中文版)
参加了 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)
## 2004-05-20 (5.4)
* 添加了 第 12.1 节 “概览”。
* 添加了 第 12.2 节 “安装 SOAP 库”。
* 添加了 第 12.3 节 “步入 SOAP”。
* 添加了 第 12.4 节 “ SOAP 网络服务查错”。
* 添加了 第 12.5 节 “WSDL 介绍”。
* 添加了 第 12.6 节 “以 WSDL 进行 SOAP 内省”。
* 添加了 第 12.7 节 “搜索 Google”。
* 添加了 第 12.8 节 “ SOAP 网络服务故障排除”。
* 添加了 第 12.9 节 “小结”。
* 修改了 第 16 章 _函数编程_ 和 第 18 章 _性能优化_ 中的大量技术评论。
## 2004-05-12 (5.3)
* 为 第 18.3 节 “优化正则表达式” 添加了 `isalpha()` 的示例。感谢你,Paul。
* 对 第 5 章 _对象和面向对象_ 和 第 6 章 _异常和文件处理_ 进行了大量修改。
* 修正了 第 9.7 节 “Segue ” 中的 URL 地址。
## 2004-05-09 (5.2)
* 修正了 第 14.1 节 “roman.py, 第 1 阶段” 中的一个 URL 地址。
* 添加了 第 18.1 节 “概览”。
* 添加了 第 18.2 节 “使用 timeit 模块”。
* 添加了 第 18.3 节 “优化正则表达式”。
* 添加了 第 18.4 节 “优化字典查找”。
* 添加了 第 18.5 节 “优化列表操作”。
* 添加了 第 18.6 节 “优化字符串操作”。
* 添加了 第 18.7 节 “小结”。
## 2004-05-05 (5.1)
* 修订了 例 7.7 “校验十位数” 和 例 7.8 “用 {n,m} 语法确认罗马数字”。
* 修订了 例 7.10 “发现数字” 。
* 修正了 例 11.6 “测试 Last-Modified” 中的拼写错误。感谢你,Jesir。
* 修正了 例 3.11 “extend (扩展) 与 append (追加) 的差别” 与 append (追加) 的差别") 中的拼写错误。感谢你,Daniel。
* 修改了大量技术评论。
* 对 第 1 章 _安装 Python_、第 2 章 _第一个 Python 程序_、第 3 章 _内置数据类型_ 和 第 4 章 _自省的威力_ 进行了大量修改。
## 2004-04-16 (5.0)
* 添加了 第 11.1 节 “概览”.
* 添加了 第 11.2 节 “避免通过 HTTP 重复地获取数据”.
* 添加了 第 11.3 节 “HTTP 的特性”.
* 添加了 第 11.4 节 “调试 HTTP web 服务”.
* 添加了 第 11.5 节 “设置 User-Agent”.
* 添加了 第 11.6 节 “处理 Last-Modified 和 ETag”.
* 添加了 第 11.7 节 “处理重定向”.
* 添加了 第 11.8 节 “处理压缩数据”.
* 添加了 第 11.9 节 “全部放在一起”.
* 添加了 第 11.10 节 “小结”.
* 添加了 例 3.11 “extend (扩展) 与 append (追加) 的差别” 与 append (追加) 的差别").
* 在 第 1 章 _安装 Python_ 中修改了关于如何下载 Python 的描述,使其更一般化,且减少了版本依赖性。
* 在 第 2.1 节 “概览” 和 第 2.4 节 “万物皆对象” 中,把术语 “module” (模块) 改为了 “program” (程序),因为我们此时尚未介绍模块。
* 在 第 2.4 节 “万物皆对象” 中,添加了打开 Python IDE 的详细说明,和原来的例子合并在一起。
* 把所有引用到布尔值 `1` (真) 和 `0` (假) 分别改为了 `True` 和 `False`。
* 更新了 例 3.22 “字符串格式化与字符串连接的比较” ,以展示 Python 2.3 所显示的`TypeError` 消息。
* 修正了 例 17.19 “使用生成器替代递归” 中的拼写错误。
* 修正了 第 7.7 节 “小结” 中的拼写错误。
* 修正了 例 17.9 “plural4.py” 中的拼写错误。
## 2004-03-25 (4.9)
* 完成了 第 16.7 节 “全部放在一起”。
* 添加了 第 16.8 节 “小结”。
* 把对单元测试的介绍分成了两章: 第 13 章 _单元测试_ 和 第 14 章 _测试优先编程_。
* 修正了 例 17.12 “plural4.py 的完成” 中的拼写错误。
* 修正了 例 17.18 “介绍生成器” 中的拼写错误。
## 2004-03-25 (4.8)
* 完成了 第 17.7 节 “plural.py, 第 6 阶段”。
* 完成了 第 17.8 节 “小结”。
* 修复了 附录 A, _进一步阅读_、附录 B, _五分钟回顾_、附录 C, _技巧和窍门_和附录 D, _示例清单_中的失效链接。
## 2004-03-21 (4.7)
* 添加了 第 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 节 “小结” (未完成)。
## 2004-03-14 (4.6)
* 完成了 第 7.4 节 “使用 {n,m} 语法”。
* 完成了 第 7.5 节 “松散正则表达式”。
* 完成了 第 7.6 节 “个案研究:解析电话号码”。
* 扩写了 第 7.7 节 “小结”。
## 2004-03-07 (4.5)
* 添加了 第 7.1 节 “概览”。
* 添加了 第 7.4 节 “使用 {n,m} 语法” (未完成)。
* 添加了 第 7.5 节 “松散正则表达式” (未完成)。
* 添加了 第 7.6 节 “个案研究:解析电话号码” (未完成)。
* 添加了 第 7.7 节 “小结”。
* 把 第 7.2 节 “个案研究:街道地址” 和 第 7.3 节 “个案研究:罗马字母” 移入了正则表达式这一章。
* 添加了 例 6.20 “使用 glob 列出目录”。
* 添加了 例 6.7 “写入文件”。
* 添加了 例 5.11 “直接继承自内建数据类型 dict”。
* 添加了 例 10.11 “打印到 stderr”。
* 添加了 例 4.12 “使用getattr 创建分发者” 和 例 4.13 “getattr 缺省值”。
* 添加了 例 2.6 “if 语句”。
* 添加了 例 3.23 “数值的格式化”。
* 把 第 5 章 _对象和面向对象_ 分成了两章:第 5 章 _对象和面向对象_ 和 第 6 章 _异常和文件处理_。
* 把 第 9 章 _XML 处理_ 分成了两章:第 9 章 _XML 处理_ 和 第 10 章 _脚本和流_。
* 把 第 13 章 _单元测试_ 分成了两章:第 13 章 _单元测试_ 和 第 15 章 _重构_。
* 把 第 4 章 _自省的威力_ 中的 `help` 改名为 `info`。
* 修正了 第 8.5 节 “locals 和 globals” 中的回向引用。
* 修复了 第 8.1 节 “概览” 中失效的示例链接。
* 修复了 第 9.1 节 “概览” 示例中丢失的若干行。
* 修正了 第 8.2 节 “sgmllib.py 介绍” 中的拼写错误。
## 2003-10-08 (4.4)
* 添加了 第 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.9 节 “小结”。
* 删除了序言。
* 修正了 例 3.27 “odbchelper.py 的输出结果” 中的拼写错误。
* 为 第 2.3 节 “文档化函数” 添加了指向 PEP 257的链接。
* 修正了 第 3.4.2 节 “一次赋多值” 中指向 [_How to Think Like a Computer Scientist_](http://www.ibiblio.org/obp/thinkCSpy/ "Python book for computer science majors") 的链接。
* 添加了 第 3.3 节 “Tuple 介绍” 中关于隐式断言 (assert) 的评注。
## 2003-09-28 (4.3)
* 添加了 第 16.6 节 “动态导入模块”。
* 添加了 第 16.7 节 “全部放在一起” (未完成)。
* 修正了 附录 F, _关于本书_ 中的链接。
## 2003-09-17 (4.2.1)
* 修正了主页中的链接。
* 修复了语法高亮。
## 2003-09-12 (4.2)
* 修正了 第 16.4 节 “重识列表映射”、第 16.3 节 “重识列表过滤”、第 7.2 节 “个案研究:街道地址” 和 第 10.6 节 “处理命令行参数” 中的拼写错误。感谢你,Doug。
* 修正了 第 5.3 节 “类的定义” 中的外部链接。感谢你,Harry。
* 修改了 第 4.5 节 “过滤列表” 结尾的措辞。感谢你,Paul。
* 为 第 13.5 节 “负面测试 (Testing for failure)”") 添加了几句话,以强调我们正在给 `assertRaises` 传递一个函数,而非函数名称。感谢你,Stephen。
* 修正了 第 8.8 节 “dialect.py 介绍” 中的拼写错误。感谢你,Wellie。
* 修正了关于方言示例的若干链接。
* 修正了关于罗马数字历史的外部链接。感谢世界各地的罗马数字爱好者。
## 2002-07-28 (4.1)
* 添加了 第 10.3 节 “查询缓冲节点”。
* 添加了 第 10.4 节 “查找节点的直接子节点”。
* 添加了 第 10.5 节 “根据节点类型创建不同的处理器”。
* 添加了 第 10.6 节 “处理命令行参数”。
* 添加了 第 10.7 节 “全部放在一起”。
* 添加了 第 10.8 节 “小结”。
* 修正了 第 6.5 节 “与目录共事” 中的拼写错误。应该是 `os.getcwd()`,而不是 `os.path.getcwd()`。感谢你,Abhishek。
* 修正了 第 3.7 节 “连接 list 与分割字符串” 中的排印错误。当在 Python IDE 中求值 (而非打印) 的时候,它会在输出的两侧加上单引号。
* 修改了 第 4.8 节 “全部放在一起” 中的 `str` 示例,以使用一个用户定义的函数,因为 Python 2.2 会为内置的字典模块定义一个 `doc string`,从而导致原来那个示例的失效。感谢 Eric。
* 修正了 第 9.4 节 “Unicode” 中的拼写错误,“anyway”改为“anywhere”。感谢 Frank。
* 修正了 第 13.6 节 “完备性检测 (Testing for sanity)”") 中的拼写错误,我原把“accept”重复了一次。感谢 Ralph.
* 修正了 第 15.3 节 “重构” 中的排印错误,`C?C?C?` 匹配零至三个 `C`,而不是四个。感谢 Ralph。
* 重写了 例 3.9 “Slice 简写” 中对分片的解说,使之更加清晰。感谢 Petr。
* 添加了 第 5.5 节 “探索 UserDict:一个封装类” 中的历史评注。现在 Python 2.2 支持直接子类化内置数据类型了。
* 为 例 5.9 “定义 UserDict 类” 添加了对字典的方法 `update` 的解说。感谢 Petr。
* 在 第 5.5 节 “探索 UserDict:一个封装类” 中阐明了 Python 对重载的不支持。感谢 Petr。
* 修正了 例 8.8 “BaseHTMLProcessor 介绍” 中的排印错误。HTML 注释以两个 (而非一个) 横杠和一个括号结束。感谢 Petr。
* 修改了 第 8.5 节 “locals 和 globals” 中关于嵌套作用域的注记。Python 2.2 已经发布了。感谢 Petr。
* 修正了 例 8.14 “BaseHTMLProcessor.py 中的基于 dictionary 的字符串格式化”; 中的排印错误:本应该是一连串空格,我误打为一个了。感谢 Petr。
* 添加了 第 5.5 节 “探索 UserDict:一个封装类” 的标题以标志基类。感谢 Petr。
* 添加了 第 15.3 节 “重构” 中的标题以提示下载 `unittest`。感谢 Petr。
* 修正了 例 16.6 “在当前目录运行脚本” 中的排版错误;空格被误打为了制表符;行号也没有对准。感谢 Petr。
* 修正了 第 3.2 节 “List 介绍” 中首字母未大写的错误。应该是 `True` 和 `False`,而非 `true` 和 `false`。感谢所有指出这一点的读者。
* 修改了 第 3.1 节 “Dictionary 介绍”、第 3.2 节 “List 介绍” 和 第 3.3 节 “Tuple 介绍” 的小节标题。“Dictionaries 101”表明这是 Dictionary 的入门教程。美国的大学往往用“101”标示无需知识背景的入门课程,但显然这仅仅是个美国传统,所以没必要让我的国际读者们费劲猜测。――当我一年半前开始写这本书时,从未想到会拥有国际读者。
* 把样式表升级到 DocBook XSL 1.52 版。
* 升级到 由 Michael Kay 编制的 SAXON XSLT 解析器 6.52 版。
* 调整了样式表的相关部分。
* 上次修订后,她答应了。婚礼明年春天举行。
## 2002-04-26 (4.0-2)
* 修正了 例 4.15 “and 介绍” 中的拼写错误。
* 修正了 例 2.4 “模块导入的搜索路径” 中的拼写错误。
* 修复了 Windows 帮助文件 (样式表的改动引起了目录的丢失)。
## 2002-04-19 (4.0)
* 扩写了 第 2.4 节 “万物皆对象”,详细介绍了导入搜索路径。
* 修正了 例 3.7 “负的 list 索引” 中的拼写错误。感谢 Brian 的校正。
* 重写了 第 3.2 节 “List 介绍” 中关于真值的提示。现在 Python 有单独的布尔类型了。
* 修正了 第 5.2 节 “使用 from module import 导入模块” 中与 Java 的语法比较部分的拼写错误。感谢 Rick 的校正。
* 添加了 第 5.5 节 “探索 UserDict:一个封装类” 中的注解,说明了子类总是重写基类。
* 修正了 例 5.18 “修改类属性” 中的拼写错误。感谢 Kevin 的校正。
* 添加了 第 6.1 节 “异常处理” 中的注解,说明了可以自己定义异常并触发它。感谢 Rony 的建议。
* 修正了 例 8.17 “处理特别标记” 中的拼写错误。感谢 Rick 的校正。
* 添加了 例 8.18 “SGMLParser” 中的注解,详细说明了返回值。感谢 Howard 的建议。
* 在 例 10.6 “openAnything” 中,添加了 `StringIO` 初始化式中的 `str` 函数。感谢 Ganesan 的主意。
* 添加了 第 13.3 节 “romantest.py 介绍” 中的链接,解释了为什么测试用例要放在另一个文件中。
* 修改了 第 16.2 节 “找到路径”,用 `os.path.dirname` 代替了 `os.path.split`。感谢 Marc 的主意。
* 添加了代码示例 (`piglatin.py`、`parsephone.py` 和 `plural.py`),为正则表达式一章作准备。
* 更新并扩充了主页上关于 Python 的链接。
## 2002-01-01 (3.9)
* 添加了 第 9.4 节 “Unicode”。
* 添加了 第 9.5 节 “搜索元素”。
* 添加了 第 9.6 节 “访问元素属性”。
* 添加了 第 10.1 节 “抽象输入源”。
* 添加了 第 10.2 节 “标准输入、输出和错误”。
* 在 第 6.3 节 “for 循环” 中,为 `for` 循环示例添加了简单计数的例子 (好的用法和不好的用法)。感谢 Kevin 的主意。
* 修正了 例 3.25 “keys, values 和 items 函数” 中的排印错误 (`params.values()` 的两个元素被颠倒了)。
* 修正了 第 4.3 节 “使用 type、str、dir 和其它内置函数” 中关于 `__builtin__` 模块的错误。感谢 Denis 的校正。
* 为 第 16.2 节 “找到路径” 添加了更多的示例,展示了如何在当前目录下运行单元测试,而不必进入 `regression.py` 所在的目录。
* 在 例 3.7 “负的 list 索引” 中,修改了如何由正索引得到负索引的解释。感谢 Renauld 的建议。
* 更新了主页上 Python 的下载链接。
* 为主页添加了指向 Bruce Eckel 的 [_Thinking in Python_](http://www.mindview.net/Books/TIPython "advanced book on design patterns in Python") 初稿的链接。这是一本不可思议的 (也是高阶的) 书,讲述了设计模式以及如何用 Python 实现它们。
## 2001-11-18 (3.8)
* 添加了 第 16.2 节 “找到路径”。
* 添加了 第 16.3 节 “重识列表过滤”。
* 添加了 第 16.4 节 “重识列表映射”。
* 添加了 第 16.5 节 “数据中心思想编程”。
* 扩充了 第 16.1 节 “概览” 中的样例输出。
* 完成了 第 9.3 节 “XML 解析”。
## 2001-09-30 (3.7)
* 添加了 第 9.2 节 “包”。
* 添加了 第 9.3 节 “XML 解析”。
* 把 第 9.1 节 “概览” “打扫干净”了。感谢 Matt 的建议。
* 在 第 5.2 节 “使用 from module import 导入模块” 中,添加了关于 Java 的提示。感谢 Ori 的建议。
* 修正了 第 4.8 节 “全部放在一起” 中的错误。我曾暗示过,在 Python 中你不能使用 `is None` 来判断变量是否为 null。实际上可以;而且它比 `== None` 快。感谢 Ori 指出错误。
* 澄清了 第 3.2 节 “List 介绍”:我曾说 `li = li + other` 与 `li.extend(other)` 等价。操作结果的确相同;但 `extend` 更快,因为它不会创建新 list。感谢 Denis 指出。
* 修正了 第 3.2 节 “List 介绍” 中的错误:我曾说 `li += other` 与 `li = li + other` 等价。实际上,它与 `li.extend(other)` 等价,因为它不会创建新 list。感谢 Denis 指出。
* 修正了 第 2 章 _第一个 Python 程序_ 因我的懒惰而引起的排版错误。当我写这一章时,我没有在字符串字面量的两侧加单引号。它们会被赋予特殊字体,但在这本书的一些编译版本 (如纯文本) 中这不奏效。感谢 Denis 的建议。
* 修正了 第 2.2 节 “函数声明” 中的错误。我曾说静态类型语言总是显示地要求给出变量的数据类型;事实上并非总是如此。有些静态类型语言会在编译时根据代码确定变量类型。感谢 Tony 指出。
* 添加了指向 [西班牙文版](http://es.diveintopython.org/) 的链接。
## 2001-09-06 (3.6.4)
* 为 `BaseHTMLProcessor` 添加处理非 HTML 实体引用的代码,并在 第 8.4 节 “BaseHTMLProcessor.py 介绍” 中添加了关于它的注解。
* 修改了 例 8.11 “globals 介绍”,使之在输出中包括 `htmlentitydefs`。
## 2001-09-04 (3.6.3)
* 修正了 第 9.1 节 “概览” 中的拼写错误。
* 添加了指向 [韩文版](http://kr.diveintopython.org/html/index.htm) 的链接。
## 2001-08-31 (3.6.2)
* 修正了 第 13.6 节 “完备性检测 (Testing for sanity)”") 中的排印错误 (最后一点要求列了两次)。
## 2001-08-31 (3.6)
* 完成了 第 8 章 _HTML 处理_;在其末尾添加了 第 8.9 节 “全部放在一起” 和 第 8.10 节 “小结”。
* 添加了 第 15.4 节 “后记”。
* 在 第 9 章 _XML 处理_ 开头添加了 第 9.1 节 “概览”。
* 在 第 16 章 _函数编程_ 开头添加了 第 16.1 节 “概览”。
* 修正了一个长期存在的 bug:第 8 章 _HTML 处理_ 中的示例被错误地着色了。
* 添加了指向 [法文版](http://fr.diveintopython.org/toc.html) 的链接。他们做对了:他们翻译了 XML 源文件,这样我的构建脚本得以重用,他们的成果就可以用六种格式发布。
* 升级到 DocBook XSL 1.43 版的样式表。
* 升级到 由 Michael Kay 编制的 SAXON XSLT 解析器 6.43 版。
* 对样式表进行了大规模翻修:放弃了原来的基于表格的排版,转向层叠样式表。不幸的是, CSS 总是会出兼容性问题,所以在每个页面的首尾部分都保留的表格。编译后的 HTML 版本在 Netscape 4 看起来更糟糕了;但在大多数现代浏览器中――包括 Netscape 6、Mozilla、Internet Explorer 5、Opera 5、Konqueror 和 iCab――中表现良好。在 Lynx 中完全可读。我爱 Lynx!它是我使用的第一个浏览器。你永远不会忘记你的第一次。
* 迁移到 [Ant](http://jakarta.apache.org/ant/) 平台上,以便控制进程――我现在可是在六种格式和两种语言中探险。
* 整理了所有的下载档案;这之前我为每个平台都发布了不同的文件,因为 Python 的 `zipfile` 模块创建的 .zip 文件不标准,因此不能被 Mac OS 上的 Aladdin Expander 打开。但 Ant 创建的 .zip 完全标准,兼容性良好。好样的,Ant!
* 我们把 XML 源、XSL 样式表和相关的脚本和库放在了 SourceForge。对于喜欢冒险的人们,当然有 CVS 接入。
* 在与 GPL 调和的 [Python 2.1.1 license](http://www.python.org/2.1.1/license.html) 下重新发布了代码。感谢你,Guido;人们确实关心,而它确实要紧。
## 2001-06-26 (3.5)
* 在 第 2.2 节 “函数声明” 中添加了对 强/弱/静态/动态 数据类型的注解。
* 添加了 第 3.1 节 “Dictionary 介绍” 中关于大小写敏感的示例。
* 在 第 5 章 _对象和面向对象_ 中使用了 `os.path.normcase`,以兼容对大小写不敏感的糟糕的操作系统。
* 修正了 PDF 版本中代码的缩进问题。
## 2001-05-31 (3.4)
* 添加了 第 14.5 节 “roman.py, 第 5 阶段”。
* 添加了 第 15.1 节 “处理 bugs”。
* 添加了 第 15.2 节 “应对需求变化”。
* 添加了 第 15.3 节 “重构”。
* 添加了 第 15.5 节 “小结”。
* 又修正一个样式表 bug :嵌套的 `</span>` 标记总是丢失。
## 2001-05-24 (3.3)
* 添加了 第 13.2 节 “深入”。
* 添加了 第 13.3 节 “romantest.py 介绍”。
* 添加了 第 13.4 节 “正面测试 (Testing for success)”")。
* 添加了 第 13.5 节 “负面测试 (Testing for failure)”")。
* 添加了 第 13.6 节 “完备性检测 (Testing for sanity)”")。
* 添加了 第 14.1 节 “roman.py, 第 1 阶段”。
* 添加了 第 14.2 节 “roman.py, 第 2 阶段”。
* 添加了 第 14.3 节 “roman.py, 第 3 阶段”。
* 添加了 第 14.4 节 “roman.py, 第 4 阶段”。
* 在兼容 Netscape/Mozilla 的强烈要求下,调整了样式表。
## 2001-05-03 (3.2)
* 添加了 第 8.8 节 “dialect.py 介绍”。
* 添加了 第 7.2 节 “个案研究:街道地址”。
* 修正了 `handle_decl` 方法中的 bug:它会产生不正确的声明 (把空格加在的不该出现的地方)。
* 修正了 CSS (2.9 介绍过) 中的 bug:背景色丢失了。
## 2001-04-18 (3.1)
* 为 `BaseHTMLProcessor.py` 添加处理声明的代码;现在 Python 2.1 也支持这段代码了。
* 添加 第 8.5 节 “locals 和 globals” 中关于嵌套作用域的注解。
* 修正了 例 8.1 “BaseHTMLProcessor.py” 中的一个隐秘的 bug:带有字符实体的属性值不会被合适地转义。
* 对于本书中的示例,现在推荐 (并不要求) Python 2.1,因为它支持 `sgmllib.py` 中的声明。
* 更新了 [主页](http://diveintopython.org/) 上的链接,使其指向已经发布的 Python 2.1。
* 给文件加上了时间戳,以帮助重发布这本书的人们。
## 2001-04-16 (3.0)
* 对 第 8 章 _HTML 处理_ 中的代码修正了几个小错误。
* 在 [主页](http://diveintopython.org/) 上添加了指向中文版的链接。
## 2001-04-13 (2.9)
* 添加了 第 8.5 节 “locals 和 globals”。
* 添加了 第 8.6 节 “基于 dictionary 的字符串格式化”。
* 紧缩了 第 8 章 _HTML 处理_ 中的代码,特别是 `ChefDialectizer`,以使用更少、更简单的正则表达式。
* 修正了一个样式表 bug:它使得生成 PDF 版本时插入了不必要的空白页。
* 修正了一个脚本 bug:它剥除了 [主页](http://diveintopython.org/) 上的 `DOCTYPE`。
* 添加了指向 Python Cookbook](http://www.activestate.com/ASPN/Python/Cookbook/ "growing archive of annotated code samples") 的链接,并为 [附录 A, _进一步阅读_ 添加了一些链接。
* 改用 [Google](http://www.google.com/services/free.html) 代理 `http://diveintopython.org/` 的站内搜索。
* 升级到 DocBook XSL 样式表 1.36 版――比它所宣称的麻烦多了。可能还有潜伏的 bug。
## 2001-03-26 (2.8)
* 添加了 第 8.3 节 “从 HTML 文档中提取数据”。
* 添加了 第 8.4 节 “BaseHTMLProcessor.py 介绍”。
* 添加了 第 8.7 节 “给属性值加引号”。
* 紧缩了 第 4 章 _自省的威力_ 中的代码:使用的内置函数 `callable` 来代替手工检测。
* 把 第 5.2 节 “使用 from module import 导入模块” 从 第 4 章 _自省的威力_ 移到了 第 5 章 _对象和面向对象_。
* 修正了 第 5.1 节 “概览” 中的排印错误 (补回了冒号)。
* 添加了几个额外的供下载的样例脚本。
* 添加了 Windows Help 输出格式。
## 2001-03-16 (2.7)
* 添加了 第 8.2 节 “sgmllib.py 介绍”。
* 紧缩了 第 8 章 _HTML 处理_ 中的代码。
* 修改了 第 2 章 _第一个 Python 程序_ 中的代码:用了 `items` 方法代替了 `keys`。
* 把 第 3.4.2 节 “一次赋多值” 一节移到了 第 2 章 _第一个 Python 程序_。
* 编辑了关于字符串 `join` 方法的评注,提供了 [_The Whole Python FAQ_](http://www.python.org/doc/FAQ.html) 中解释[why `join` is a string method](http://www.python.org/cgi-bin/faqw.py?query=4.96&querytype=simple&casefold=yes&req=search) (为什么 `join` 是字符串方法) 而不是 list 方法的这一新条目。
* 重写了 第 4.6 节 “and 和 or 的特殊性质”,强调了 `and` 和 `or` 的基本性质;并且不再强调 `and-or` 技巧。
* 把语言比较重新组织为了 `note`。
## 2001-02-28 (2.6)
* 给 PDF 和 Word 版本加入了彩色的示例文本、改进后的目录,以及缩进良好的 `tip` 和 `note`。
* 现在 Word 版本是正宗的 Word 格式了,与 Word 97 完全兼容。
* 部分地解决 PDF 和纯文本版本中的特殊字符 (像 TM 符号和花括号) 错误的问题。
* 添加了指向支持 UNIX 的 Word 版本的下载链接――有些小鬼想把它导入到 StarOffice 或其它什么环境中去。
* 修正了几个丢失标题的 `注记`。
* 修正了一个 bug:它会导致 Internet Explorer 5 for Mac OS 示例中的彩色文字发生字体错乱。(你好?!?Microsoft?好,你倒说说看,到底是 `<pre>` 的哪一部分你不懂?)
* 修复了 Mac OS 档案的下载链接。
* 在每章的第一个示例程序前,都添加了下载示例程序的链接。(我的日志显示人们往往会跳过本可以下载它们的那两个页面 (即: [主页](http://diveintopython.org/ "Dive Into Python home page") 和序言),然后在阅读时惊慌失措地寻找下载地址。)
* 进一步紧缩了 [主页](http://diveintopython.org/ "Dive Into Python home page") 和序言――但愿人们不会再因为其杂乱不堪而跳过它们。
* 但愿早点结束这没完没了的调试,回到写作正轨。
## 2001-02-23 (2.5)
* 添加了 第 6.4 节 “使用 sys.modules”。
* 添加了 第 6.5 节 “与目录共事”。
* 把 例 6.17 “分割路径名” 从 第 3.4.2 节 “一次赋多值” 移到了 第 6.5 节 “与目录共事”。
* 添加了 第 6.6 节 “全部放在一起”。
* 添加了 第 5.10 节 “小结”。
* 添加了 第 8.1 节 “概览”。
* 修正了 例 6.10 “遍历 dictionary” 中的程序清单――少了一个冒号。
## 2001-02-12 (2.4.1)
* 修改了新闻组链接,使用了 “news:” 协议。`deja.com` 已死。
* 在下载链接旁标明了文件大小。
## 2001-02-12 (2.4)
* 为大多数章节添加了 “进一步阅读”,并在 附录 A, _进一步阅读_ 中汇总。
* 在纯文本格式的外部链接旁添加了 URL 地址。
## 2001-02-09 (2.3)
* 重写了 第 5 章 _对象和面向对象_ 中的部分代码,使用了类的属性,并给出了一个更好的多值赋值的例子。
* 重新组织了 第 5 章 _对象和面向对象_,把类的部分提前了。
* 添加了 第 5.8 节 “类属性介绍”。
* 添加了 第 6.1 节 “异常处理”。
* 添加了 第 6.2 节 “与文件对象共事”。
* 把 第 5 章 _对象和面向对象_ 中的 “回顾” 部分合并到了 第 5.1 节 “概览” 中。
* 给所有的程序清单和示例选择了配色方案。
* 修正了 第 2.2 节 “函数声明” 中的重大错误:函数会隐式地返回一个 `None`,所以你 _可以_ 在不触发异常的前提下把它的返回值赋给一个变量。
* 扩写了 第 2.3 节 “文档化函数”、第 2.4 节 “万物皆对象” 和 第 3.4 节 “变量声明”,使之更加清晰。
## 2001-02-02 (2.2)
* 编辑了 第 4.4 节 “通过 getattr 获取对象引用”。
* 为 `xref` 标记添加了标题,所以它们也能显示可爱的提示框了。
* 修改了修订历史页面的主题风格。
* 修正了我昨天在我的 HTML 中提到的 bug:后期处理脚本将会导致无效的 HTML 字符引用,甚至让一些浏览器无法显示。
* 升级到 DocBook XSL 样式表 1.29 版。
## 2001-02-01 (2.1)
* 重写了 第 4 章 _自省的威力_ 中的示例代码,用 `getattr` 代替了 `exec` 和 `eval`,并重写了相应的解释文字。
* 在 第 3.2 节 “List 介绍” 中添加了列表操作的示例。
* 在章节末尾的小节部分 (第 3.8 节 “小结” 和 第 4.9 节 “小结”) 添加了指向相关内容的链接。
## 2001-01-31 (2.0)
* 把 第 5.6 节 “专用类方法” 分成了三节: 第 5.5 节 “探索 UserDict:一个封装类”、第 5.6 节 “专用类方法” 和 第 5.7 节 “高级专用类方法”。
* 修改了关于 垃圾收集 的注解以指出 Python 2.0 及其后续版本自动处理循环引用,无需手工编码。
* 修复了 UNIX 下载,使之包括了所有相关文件。
## 2001-01-15 (1.9)
* 删除了 第 2 章 _第一个 Python 程序_ 的概论。
* 删除了 第 4 章 _自省的威力_ 的概论。
* 删除了 第 5 章 _对象和面向对象_ 的概论。
* 大刀阔斧地改动文本。我似乎总是跑题。
## 2001-01-12 (1.8)
* 为 第 3.4.2 节 “一次赋多值” 添加了更多示例。
* 添加了 第 5.3 节 “类的定义”。
* 添加了 第 5.4 节 “类的实例化”。
* 添加了 第 5.6 节 “专用类方法”。
* 一些小的样式表调整,包括为 `link` 标记添加了标题。要是你的浏览器够酷的话,它会用一个可爱的提示框显示链接目标的描述。
## 2001-01-03 (1.71)
* 对样式表进行了几处修改,提高了对浏览器的兼容性。
## 2001-01-02 (1.7)
* 添加了 第 2 章 _第一个 Python 程序_ 的概览。
* 添加了 第 4 章 _自省的威力_ 的概览。
* 添加了 第 5 章 _对象和面向对象_ 的小结部分[后来删除了]。
* 添加了 第 5.9 节 “私有函数”。
* 添加了 第 6.3 节 “for 循环”。
* 添加了 第 3.4.2 节 “一次赋多值”。
* 编写了把书输出为单个 HTML 文件、PDF、Microsoft Word 97 和纯文本的脚本。
* 注册了域名 `diveintopython.org` 并把书――在线的和离线的――都移到了那里。
* 修改了 XSL 样式表,以修改在每个页面首尾显示的导航链接。页首加上了域名、版本号,以及跳到章目录、总目录和主页的快速链接。
## 2000-12-11 (1.6)
* 添加了 第 4.8 节 “全部放在一起”。
* 完成了 第 4 章 _自省的威力_:在结尾添加了 第 4.9 节 “小结”。
* 在 第 5 章 _对象和面向对象_ 的开头添加了 第 5.1 节 “概览”。
## 2000-11-22 (1.5)
* 添加了 第 4.6 节 “and 和 or 的特殊性质”。
* 添加了 第 4.7 节 “使用 lambda 函数”。
* 添加了附录 五分钟回顾。
* 添加了附录 技巧和窍门。
* 添加了附录 示例清单。
* 添加了附录 修订历史。
* 扩写了 第 3.6 节 “映射 list” 中映射列表的示例。
* 把更多的常用术语加入了 XML 实体。
* 升级到 DocBook XSL 样式表 1.25 版。
## 2000-11-14 (1.4)
* 添加了 第 4.5 节 “过滤列表”。
* 为 第 4.3 节 “使用 type、str、dir 和其它内置函数” 添加了 `dir` 文档。
* 在 第 3.3 节 “Tuple 介绍” 中,添加了 `in` 的示例。
* 添加了 MacPython 环境下 `if` `__name__` 技巧的额外说明。
* 转向了 由 Michael Kay 编制的 SAXON XSLT 解析器。
* 升级到 DocBook XSL 样式表 1.24 版。
* 添加了 db-html 处理的说明:在每个章、节中都加上了显示的文件名,避免在添加或重排节时导致深层链接实效。
* 把一些常用术语加入了 XML 实体。
* 把几个 `literal` 标记改为了 `constant`。
## 2000-11-09 (1.3)
* 添加了关于动态代码执行的部分。
* 在所有有必要的地方,都添加了对本书其它部分的引用链接。
* 扩写了 第 2 章概览,解释了这个函数的实际作用。
* 显示地声明示例代码是在 GNU General Public License 下发布的;添加了该 License 的附录。 [Note 8/16/2001:代码在与 GPL 调和的 Python license 下重新发布了。]
* 修改了链接,以使用 `xref` 标记――我弄明白怎么使用了这个标记了。
## 2000-11-06 (1.2)
* 添加了第 2 章的前四部分。
* 进一步紧缩了了序言,并添加了指向 Python 的 Mac OS 版本的链接。
* 扩写了“映射列表”和“连接字符串”中的示例,使其更富逻辑性。
* 添加了第 1 章小结中的输出。
## 2000-10-31 (1.1)
* 完成了第 1 章关于映射、连接的部分,以及整章小结。
* 在序言使用了较缓和的措辞,并添加了针对非程序员的入门教程的链接。
* 修正了几处拼写错误。
## 2000-10-30 (1.0)
* 原始发布
- 版权信息
- 第 1 章 安装 Python
- 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 章 第一个 Python 程序
- 2.1. 概览
- 2.2. 函数声明
- 2.3. 文档化函数
- 2.4. 万物皆对象
- 2.5. 代码缩进
- 2.6. 测试模块
- 第 3 章 内置数据类型
- 3.1. Dictionary 介绍
- 3.2. List 介绍
- 3.3. Tuple 介绍
- 3.4. 变量声明
- 3.5. 格式化字符串
- 3.6. 映射 list
- 3.7. 连接 list 与分割字符串
- 3.8. 小结
- 第 4 章 自省的威力
- 4.1. 概览
- 4.2. 使用可选参数和命名参数
- 4.3. 使用 type、str、dir 和其它内置函数
- 4.4. 通过 getattr 获取对象引用
- 4.5. 过滤列表
- 4.6. and 和 or 的特殊性质
- 4.7. 使用 lambda 函数
- 4.8. 全部放在一起
- 4.9. 小结
- 第 5 章 对象和面向对象
- 5.1. 概览
- 5.2. 使用 from _module_ import 导入模块
- 5.3. 类的定义
- 5.4. 类的实例化
- 5.5. 探索 UserDict:一个封装类
- 5.6. 专用类方法
- 5.7. 高级专用类方法
- 5.8. 类属性介绍
- 5.9. 私有函数
- 5.10. 小结
- 第 6 章 异常和文件处理
- 6.1. 异常处理
- 6.2. 与文件对象共事
- 6.3. for 循环
- 6.4. 使用 `sys.modules`
- 6.5. 与目录共事
- 6.6. 全部放在一起
- 6.7. 小结
- 第 7 章 正则表达式
- 7.1. 概览
- 7.2. 个案研究:街道地址
- 7.3. 个案研究:罗马字母
- 7.4. 使用 {n,m} 语法
- 7.5. 松散正则表达式
- 7.6. 个案研究:解析电话号码
- 7.7. 小结
- 第 8 章 HTML 处理
- 8.1. 概览
- 8.2. sgmllib.py 介绍
- 8.3. 从 HTML 文档中提取数据
- 8.4. BaseHTMLProcessor.py 介绍
- 8.5. locals 和 globals
- 8.6. 基于 dictionary 的字符串格式化
- 8.7. 给属性值加引号
- 8.8. dialect.py 介绍
- 8.9. 全部放在一起
- 8.10. 小结
- 第 9 章 XML 处理
- 9.1. 概览
- 9.2. 包
- 9.3. XML 解析
- 9.4. Unicode
- 9.5. 搜索元素
- 9.6. 访问元素属性
- 9.7. Segue [9]
- 第 10 章 脚本和流
- 10.1. 抽象输入源
- 10.2. 标准输入、输出和错误
- 10.3. 查询缓冲节点
- 10.4. 查找节点的直接子节点
- 10.5. 根据节点类型创建不同的处理器
- 10.6. 处理命令行参数
- 10.7. 全部放在一起
- 10.8. 小结
- 第 11 章 HTTP Web 服务
- 11.1. 概览
- 11.2. 避免通过 HTTP 重复地获取数据
- 11.3. HTTP 的特性
- 11.4. 调试 HTTP web 服务
- 11.5. 设置 User-Agent
- 11.6. 处理 Last-Modified 和 ETag
- 11.7. 处理重定向
- 11.8. 处理压缩数据
- 11.9. 全部放在一起
- 11.10. 小结
- 第 12 章 SOAP Web 服务
- 12.1. 概览
- 12.2. 安装 SOAP 库
- 12.3. 步入 SOAP
- 12.4. SOAP 网络服务查错
- 12.5. WSDL 介绍
- 12.6. 以 WSDL 进行 SOAP 内省
- 12.7. 搜索 Google
- 12.8. SOAP 网络服务故障排除
- 12.9. 小结
- 第 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.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.1. 处理 bugs
- 15.2. 应对需求变化
- 15.3. 重构
- 15.4. 后记
- 15.5. 小结
- 第 16 章 函数编程
- 16.1. 概览
- 16.2. 找到路径
- 16.3. 重识列表过滤
- 16.4. 重识列表映射
- 16.5. 数据中心思想编程
- 16.6. 动态导入模块
- 16.7. 全部放在一起
- 16.8. 小结
- 第 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.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
- 附录 J. Python 协议
- J.0. 关于译文的声明
- J.A. 软件的历史
- J.B. 使用 Python 的条款和条件