以下是各章修订清单的汇总。
  1. ../2007-06-08

  2. ../2007-06-27

  3. ../2007-06-28

  4. ../2007-07-01

  5. ../2007-07-07

  6. ../2007-07-11

  7. ../2007-07-14

  8. ../2007-07-23

  9. ../2007-07-25

  10. ../2007-07-29

  11. ../2007-08-01

  12. ../2007-08-03

  13. ../2007-08-05

  14. ../2007-08-06

  15. ../2007-08-07

  16. ../2007-08-09

  17. ../2007-08-17

  18. ../2007-08-18

6-8<X1> install.xml 安装 Python

1.1 哪一种 Python 适合您?

  1. Para 2:……大多数Linux发布版本 <!> (./) 发行版

  2. Para -1无论哪一个已经安装再您的计算机上的均可。
    (!) 表达似乎有些别扭,
    (./) 无论哪一个——只要已经安装在您计算机上——均可。

1.2 Windows 上的 Python

  1. Para 2ActiveState 制作了一个 Windows 上的 Python安装程序称为 ActivePython
    (!) 表达很别扭,
    (./) ActiveState 发布 Windows 上的 Python 安装程序,叫做 ActivePython

  2. Para 2附加了 <!> 一些 Windows 扩展 (./) 以及

  3. Para 3曾经 {X} 学习 Python 时

  4. Para 3:新的 Python 版本出来 <!> 几个月 (./) 发布

  5. 过程1.1, 5:……执行一个 {X} 定制安装

  6. 过程1.1, 6Start->Programs
    (!) 能翻译为什么不翻译呢?
    (./) 开始->程序

1.3 Mac OS X 上的 Python

  1. 过程1.4, 2挂装 <!> 到桌面 (./) 挂载

  2. 例1.1上:那您需要知道正在使用 {i} 的是 哪一个版本的 Python。

1.4 Mac OS 9 上的 Python

pass

1.5 RedHat Linux 上的 Python

  1. Para 1:如果你想在像 Linux 一样的 UNIX 兼容的操作系统上……
    (./) 在类 UNIX 的操作系统(如 Linux)上

  2. Para 2:下载最新的 Python RPM {i}

  3. 例1.2, (3):这是我们刚 <!> 的 Python (./) 安装

1.6 Debian GNU/Linux 上的 Python

  1. Para 1:如果您碰巧 {X} 运行在……

1.7 从源代码安装 Python

pass

1.8 使用 Python 的交互 Shell

  1. Para 3:让我们深入下去做这些操作
    (!) 不管原文如何,这里不符合上下文(下文不过是做了1 + 1print 'hello world'这样的简单操作)
    (./) 让我们尝试着做这些操作

6-27<X2> odbchelper.xml 第一个 Python 程序

  1. Para 1: 大家都很清楚,其它书籍是如何…… {i} 还是让我们跳过这个部分吧

2.1 概览

pass

2.2 函数声明

  1. Para 3:Python 不需要提定 <!> 明显typo 返回值的数据类型 (./) 指定

2.2.1 Python 和其他编程语言数据类型的比较

  1. “xx类型定义语言”,这样的表达太罗嗦,按照一般的表达,改为“xx类型语言”
  2. Para 3A language in which types are fixed at compile time
    一种在编译期间数据类型固定的语言
    (!) 明显,原文的被动式在这里应该是表示单纯的被动动作而非状态
    (./) 一种在编译期间就确定数据类型的语言

  3. Para 3Most statically typed languages enforce this by requiring you to declare all variables with their datatypes before using them.
    大多数静态类型语言是通过要求在使用所有变量之前声明它们的数据类型来保证这一点的。
    (!) 很有意思的是,原来的英文读起来很正常,但如实翻译成中文后明显有了逻辑问题。鉴于中英文表达习惯不同,“所有”改为“任一”。相应地,“它们的”改为“其”。
    (./) 大多数静态类型语言是通过要求在使用任一变量之前声明数据类型来保证这一点的。

  4. Para -1:因为只要一个变量具有一个数据类型
    (!) 此处采用更加动态的表达方式似乎更好
    (./) 因为只要一个变量获得了一个数据类型

2.3 文档化函数

  1. Para 1:可以通过给出一个 doc string(文档字符串) {i} 文档化一个 Python 函数

  2. 例2.2下, Para 1, Line -1:但是您可能会发现它们经常定义 doc string 的情况

  3. (!) 怎么就没人嫌别扭呢 (./) 但是您可能会发现它们经常被用于定义 doc string。

2.4 万物皆对象

  1. Para 1如果 <!> 您没在意,我刚才的意思是…… (./) 可能

  2. 例2.3, (1)...a module -- a chunk of code that you can use interactively, or from a larger Python program.
    模块是指……或者来自一个大规模的 Python 程序
    (!) 此处原译太死,不符合中文习惯,语法上也说不过去
    (./) 或者一个大规模的 Python 程序的片段

2.4.1 模块导入的搜索路径

  1. 它会按所有定义在 sys.path 中的目录进行搜索
    (./) 它会按定义在 sys.path 中的目录逐个进行搜索

  2. 例2.4, (2):sys.path 是一个组成 <!> 当前搜索路径的目录列表。 (./) 指定

  3. 例2.4, (3)有一些,像 sys 模块,是……
    (./) 有一些模块(像 sys)

2.5 代码缩进

  1. Para 1:没有花括号,用于标函数的开始和结束
    (!) 改为相对简单的语法结构
    (./) 没有标明函数的开始和结束的花括号

  2. 例2.5, Para 1:代码块 {i} 通过它们的缩进来定义的

  3. 例2.5, Para 1, Line -1:不一定非要是 4 {i} ,只要一致就可以了。没有缩进的第一行则 {i} 被视为 在函数体之外。

  4. 例2.6, (2):包括字符串、整数和其它如字典和列表(我们将在下一章学习)等类型
    (./) 包括字符串、整数和其它类型,如字典和列表(我们将在下一章学习)

  5. 例2.6, (2)通过使用以逗号分割的值列表把几个东西输出到一行上
    (!) 此处表达太罗嗦,且与下文重复了
    (./) 只需用逗号隔开

  6. 例2.6, (3):如果 if 表达式计算为 true,{i} 紧跟着的 缩进块 {i} 被执行

2.6 测试模块

  1. Para 1:您可以使用这些属性方便地测试您所书写 <!> 的模块。 (./) 编写

  2. Para 2:有几 <!> 重要的观察结果 (./)

  3. Para 3:一个模块的 __name__ 的值要看 <!> 您如何应用模块 (./) 取决于

2.-1 反馈

6-28<X3> odbchelper.xml 内置数据类型

3.1 Dictionary 介绍

  1. 例3.2, (2)括号内Yes, this will annoy you someday when you think you are adding new values but are actually just modifying the same value over and over because your key isn't changing the way you think it is.
    是的,它可能某天会给您带来麻烦,您可能以为加入了新值,但实际上只是一次又一次地修改了同一个值,这是因为您的 key 没有按照您的想法进行改变。
    (!) 说实话,不论英文和中文我都花了不少时间才彻底理解Mark是什么意思。翻译得很勉强,我调整了一下语序,添加了一些字词。
    (./) 是的,它可能某天会给您带来麻烦。设想你一次次地修改一个 dictionary,但其间您使用的 key 并未按照您的想法进行改变。您可能以为加入了新值,但实际上只是一次又一次地修改了同一个值。

  2. 例3.4, (2):……可以是字符串、整数 <!> 几种其它的类型 (./)

  3. 例3.4, (2), Line -1:也可以在一个 dictionary 中混用和配匹 明显typo <!> key 的数据类型 (./) 匹配

  4. 进一步阅读, Line -1:……总结了所有 {i} dictionary 方法

3.2 List 介绍

  1. 例3.11, (1), Line -1:并且添加这个 list 中的每个元素到原 list 中 (./) 并且这个 list 中的每个元素添加到原 list 中

  2. 例3.12下, 注解:为了弥补这一点 <!> (./) 这一个缺陷

3.3 Tuple 介绍

  1. 例3.15, (1)A tuple is defined in the same way as a list, except that the whole set of elements is enclosed in parentheses instead of square brackets.
    定义 tuple 与定义 list 的方式相同,除了整个元素集是用小括号包围的而不是方括号。
    (!) 翻译得太死,难道except非要翻译为“除了”吗
    (./) 定义 tuple 与定义 list 的方式相同,整个元素集是用小括号包围的,而不是方括号。

3.4 变量声明

  1. 3.4.1上:幸运的是,与 VBScript 不同的是 {X} ,Python 不允许您引用一个未被赋值的变量,试图这样做会引发一个异常。

  2. 进一步阅读上, Para -1: ……包括os模块, {i} 我们 将在 第 6 章 中讨论

3.5 格式化字符串

  1. 例3.21, (1)The whole expression evaluates to a string.
    整个表达式计算结果为一个字符串。
    (!) 是的,原文中的“evaluates to”的确是“计算结果为”的意思。但明显,中文在此处采用静态意义的表达法更加自然。
    (./) 整个表达式的值为一个字符串。

  2. 同上:在字符串中所有其它的字符
    (./) 字符串中的所有其它字符

  3. 例3.22下, Para 1:不同的格式化格式符和可选的修正符 {i} 用于不同的数据类型

  4. 例3.23, (1):格式符选项被认为是 <!> 一个十进制浮点数 (!) 有点逻辑问题 (./) 映射

3.6 映射 list

  1. 例3.24下, Para 1Here are the list comprehensions in the buildConnectionString function that you declared in Chapter 2:
    声明位于 第 2 章 的函数 buildConnectionString 对 list 的解析:
    (!) 此处翻译得很勉强,不妨罗嗦一点,意思反而更清楚。
    (./) 让我们回过头来看看位于 第 2 章 的函数 buildConnectionString 对 list 的解析:

  2. 例3.25, (1):keys 方法返回一个 {i} 包含 所有键的 list

  3. 例3.25, (2):values 方法返回一个 {i} 包含 所有值的 list

  4. 例3.25, (2):这个 list 以 keys 返回的 list 顺序输出 (./) 它同 keys 方法返回的 list 输出顺序相同

  5. 例3.25, (3):items 方法返回 {i} 一个形如 (key, value) 的 tuple {i} 组成 的 list

  6. 例3.25下, Para 1:这个新 list 将拥有与 params.items 相同的元素数量,在新 list 中的每个元素都将包含从 dictionary.params 来的一个键和与其关联值的字符串
    (!) 翻译得很勉强
    (./) 这个新 list 将与 params.items 一一对应:新 list 中的每个元素都是 dictionary.params 中的一个键-值对构成的的字符串

  7. 进一步阅读:Python Tutorial 展示了如何 {i} 嵌套 list 的 list {i} 进行 解析

3.7 连接 list 与分割字符串

  1. Para 4:总之, {i} 这里的 join 方法将 list 中的元素连接成单个字符串……

  2. Para 4下, 提示:它不进行任何的类型强制转换 <!> (./) 强制类型转换

  3. 进一步阅读上:……在您想要搜索一个子串,然后处理字串前面的东西 <!> (即 list 中第一个元素) 和其后的东西 <!> (即 list 中第二个元素) 时…… (./) 前半部分 后半部分

3.7.1 字符串方法的历史注解

  1. I use the new join method exclusively, but you will see code written either way...
    我只使用新的 join 方法,但是您将会看到代码的其它写法,并且如果它真的使您……
    (./) 我只使用新的 join 方法,但是您还是会看到其它写法。如果它真的使您……

3.8 小结

  1. Line -1:分割字符串 成为 list 和 连接 list 成为字符串
    (./) 把字符串分割为list 和把 list 连接为字符串

3.-1 反馈

7-1<X4> apihelper.xml 自省的威力

  1. Para 1:……Python 中任何东西都是对象 <!> ,…… (!) 为了和前面章节的用词统一, (./) 万物皆对象

4.1 概览

  1. 例4.2上:……它可以使用 <!> 任何……作为参数…… (./) 接受

  2. 例4.2, Para 1:缺省地,程序输出进行了格式化处理 {i} ,以使其易于阅读

4.2 使用可选参数和命名参数

  1. 例4.4下, 提示:调用函数时唯一需要 <!> 做的事情就是为每一个必备参数指定值…… (./) 必须

4.3 使用 type、str、dir 和其它内置函数

  1. Para 1...This was actually a conscious design decision,...
    ……其实这是一个非常明智的设计决策……
    (!) decision固然是“决策”的意思,但我想此处Mark的意思应该是“策略”而不是“决策”。
    (./) ……其实这是一个非常明智的设计策略……

  2. Para 2:添加了脚注:
    这对于处理多种数据类型的帮助者函数 <footnote><para>帮助者函数,原文是 helper function,也就是我们在前文所看到的诸如 <literal>odbchelper</literal>、<literal>apihelper</literal> 这样的函数。——译注</para></footnote> 非常有用。
    (!) helper function这个术语的出现对于英文阅读者十分自然(helper已经出现在函数名中了),但中文版应该予以说明。

4.3.1 type 函数

pass

4.3.2 str 函数

  1. Para 1The str coerces data into a string. Every datatype can be coerced into a string.
    str 将数据强制转型 <!> 为字符串。每种数据类型都可以强制转型为字符串。
    (!) coerce在国内不是通译为“强制转换”吗,我真不知道YuLin是怎么会想到用“转型”这个词的。(台湾译风的影响?)
    (./) 转换

  2. 例4.6, (4)You'll use this to your advantage in the info function...
    你将会使用这一点来提高你的 info 函数
    (./) 你将会使用这一点来改进你的 info 函数

  3. 例4.7, (1):li 是一个列表,所以 dir(li) 返回 {i} 一个包含所有列表方法的一个 {X} 列表。

  4. 例4.8上:如果参数对象是可调用的那么返回 true否则返回 false。
    (./) 如果参数对象是可调用的,返回 true;否则返回 false。

  5. 例4.8, (1)...but the module contains a lot of useful constants like this string.punctuation, which contains all the standard punctuation characters.
    但是在这个模块中包含了许多有用的变量比如 string.punctuation,这个模块包含了所有标准的标点符号字符。
    (!) 估计是一个which把译者给搞懵了,竟然稀里糊涂地翻译成了“模块”
    (./) 但是在这个模块中包含了许多有用的变量,例如 string.punctuation,这个字符串包含了所有标准的标点符号字符。

4.3.3 内置函数

  1. Para 2:像这样考虑的好处是,是你可以获取 __builtin__ 模块信息的…… (!) 估计是typo (./) 你是

  2. Para 2:猜到什么了吗, {i} 现在我们的 Python 有一个称为 info 的函数。 (!) 从上下文来看,info函数明显是作者自己写的,而不是Python原有的。

  3. Para 2, Line -1:……应该看上去已经 {i} 熟悉了。 (!) 这里是为了中文表达的顺畅

4.4 通过getattr获取对象引用

  1. 例4.10, (3):如果不深信它是多么的有用 (./) 确信

  2. 例4.12, (3):现在你可以简单地调用输出函数就像调用其它函数一样
    (./) 现在你可以简单地调用输出函数就像调用其它函数一样。

4.5 过滤列表

  1. Para 3A filter expression can be any expression that evaluates true or false (which in Python can be almost anything)
    过滤器表达式可以是返回值为真或者假(在 Python 中是 几乎任何东西)的任何表达式。
    (!) 又一次没有把握语序,括号里面的内容解说的是expression而非false。况且大多数 Python 表达式的值是真,而不是假。
    (./) 过滤器表达式可以是返回值为真或者假的任何表达式(在 Python 中是 几乎任何东西)

  2. 同上:任何经过滤器表达式演算值为元素的真都可以包含在映射中。
    (./) 任何经过滤器表达式演算值为真的元素都可以包含在映射中。

  3. 进一步阅读上,整段部件 <!> 一律改为更常见的术语, (./) 成员。(不再列出全文,还请自己参看)

  4. 进一步阅读:Python Tutorial 讨论了 使用内置过滤器 <!> 函数……
    (!) 过度翻译,Python里可没有叫做“过滤器”的函数,只有filter函数
    (./) filter

4.6 and 和 or 的特殊性质

  1. 为了和前面章节的用词一致,布尔上下文 <!> 一律改为前文中使用的,也是更好的术语, (./) 布尔环境。顺便说一句,我发现几乎所有被翻译为“上下文”的术语都是指“环境”,不知道 programming 资料的第一批译者是怎么想的

  2. 例4.18上不只 <!> 一次 (./) 不止

  3. 例4.18下:and-or技巧, {i} 也就是bool and a or b表达式……

4.7 使用 lambda 函数

  1. 例4.20, (2)你可以使用 lambda 函数甚至不需要将它赋值给一个变量。
    (./) 使用 lambda 函数甚至不需要将它赋值给一个变量。

  2. 例4.21, (2)split without any arguments splits on whitespace.
    不带参数的 split