附录 E. 修订历史
Description: Python from novice to pro
Keywords: Python, Dive Into Python, tutorial, object-oriented, programming, documentation, book, free

# 深入 Python :Dive Into Python 中文版 Python 从新手到专家 [Dip_5.4b_CPyUG_Release] | Find:

## 附录 E. 修订历史

### 2007-09-01 (5.4b)

- XiaQ (xiaqqaix AT gmail DOT com) 进行了 Dive Into Python 中文版的修订工作，重发布为 5.4b 版。可以在 Dive Into Python 中文版的项目主页上找到一份完整的 (同时也是及其冗长的) 修订清单。注意原英文版不含 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 (追加) 的差别” 中的拼写错误。感谢你，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 (追加) 的差别”.
- 在 第 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 的链接。
- 添加了 第 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 初稿的链接。这是一本不可思议的 (也是高阶的) 书，讲述了设计模式以及如何用 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 指出。
- 添加了指向 西班牙文版 的链接。

### 2001-09-06 (3.6.4)

- 为 `BaseHTMLProcessor` 添加处理非 HTML 实体引用的代码，并在 第 8.4 节 “BaseHTMLProcessor.py 介绍” 中添加了关于它的注解。
- 修改了 例 8.11 “globals 介绍”，使之在输出中包括 `htmlentitydefs`。

### 2001-09-04 (3.6.3)

- 修正了 第 9.1 节 “概览” 中的拼写错误。
- 添加了指向 韩文版 的链接。

### 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 处理 中的示例被错误地着色了。
- 添加了指向 法文版 的链接。他们做对了：他们翻译了 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 平台上，以便控制进程――我现在可是在六种格式和两种语言中探险。
- 整理了所有的下载档案；这之前我为每个平台都发布了不同的文件，因为 Python 的 `zipfile` 模块创建的 .zip 文件不标准，因此不能被 Mac OS 上的 Aladdin Expander 打开。但 Ant 创建的 .zip 完全标准，兼容性良好。好样的，Ant！
- 我们把 XML 源、XSL 样式表和相关的脚本和库放在了 SourceForge。对于喜欢冒险的人们，当然有 CVS 接入。
- 在与 GPL 调和的 Python 2.1.1 license 下重新发布了代码。感谢你，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` 中的声明。
- 更新了 主页 上的链接，使其指向已经发布的 Python 2.1。
- 给文件加上了时间戳，以帮助重发布这本书的人们。

### 2001-04-16 (3.0)

- 对 第 8 章 HTML 处理 中的代码修正了几个小错误。
- 在 主页 上添加了指向中文版的链接。

### 2001-04-13 (2.9)

- 添加了 第 8.5 节 “locals 和 globals”。
- 添加了 第 8.6 节 “基于 dictionary 的字符串格式化”。
- 紧缩了 第 8 章 HTML 处理 中的代码，特别是 `ChefDialectizer`，以使用更少、更简单的正则表达式。
- 修正了一个样式表 bug：它使得生成 PDF 版本时插入了不必要的空白页。
- 修正了一个脚本 bug：它剥除了 主页 上的 `DOCTYPE`。
- 添加了指向 Python Cookbook 的链接，并为 附录 A, 进一步阅读 添加了一些链接。
- 改用 Google 代理 `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 中解释why `join` is a string method (为什么 `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 档案的下载链接。
- 在每章的第一个示例程序前，都添加了下载示例程序的链接。(我的日志显示人们往往会跳过本可以下载它们的那两个页面 (即： 主页 和序言)，然后在阅读时惊慌失措地寻找下载地址。)
- 进一步紧缩了 主页 和序言――但愿人们不会再因为其杂乱不堪而跳过它们。
- 但愿早点结束这没完没了的调试，回到写作正轨。

### 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)

- 原始发布