1. 标注方式:

借鉴《Dive Into Python》项目的标注方法。 先列出出处,使用等宽字体。以txt文件“行”为准:

示例:

第166行:Rockermail在线 <!> 电子邮件服务系统,也就是 {i} 今天雅虎邮件系统的前身。 (!) (白页是指用户信息数据库,Rockermail是第一个主流的免费邮件系统。日后Four11一家公司被雅虎收购,雅虎使用Rockermail的引擎开发了雅虎邮件——译者按)

  1. 引用原译文,被修改的地方用粗体标示。简单改动一两个词,后面不再引用完整的句子,此时被修改的词后面加注 <!> ,与 (./) 后面的词构成一一对应。

  2. 短注解插入原文,长注解放在后面,跟在 (!) 后。

  3. 最后的 (./) 后跟修改方案,与前文对应的字词也用粗体标示。

  4. 插入字词用 {i} 要插入的字词

特殊符号及字形的插入方式可在“文本模式下”看到



  • 前言


  • 第一章

Chun_ch01.txt:23 col 155: Python是一种优雅而健壮的编程语言,它继承了传统的编译语言的强大功能和通用性,同时也借鉴了简单的脚本和解释型语言的易用性。它不仅让您完成工作,而且以后还可以 {i} 流畅的阅读自己写的代码。您会对自己如此快地学会它和它强大的功能感到十分的惊讶,更不用提您已经完成的工作了,这时您的想象力会变得非常有限。

  • (./) (Python是一种优雅而健壮的编程语言,它继承了传统的编译语言的强大功能和通用性,同时也借鉴了简单的脚本和解释型语言的易用性。它不仅让您完成工作,而且以后还可以流畅的阅读自己写的代码。您会对自己如此快地学会它和它强大的功能感到十分的惊讶,更不用提您已经完成的工作了,这时你唯一的限制是你的想象力.)

Chun_ch01.txt :28那时van Rossum是一位研究人员,而且对解释型语言ABC有非常好的语言设计经验,这个语言也是在CWI开发的,但是他对它被开发成具有更多功能的能力不太满意。使用过和部分开发了像ABC这样的高级语言,回过头来使用C语言的可能性一点都不大。他注意到的一些工具都是为了完成一般的系统管理任务,所以他想使用Amoeba分布式操作系统的系统调用的能力。尽管van Rossum为Amoeba专用语言提供了一些想法,但是一种通用的语言更有价值,于是在1989年末,Python的种子被播下了。

  • (./) (van Rossum是解释型语言ABC的资深设计人员,这个语言也是在CWI开发的,但是他对它的扩展性不太满意。很难混合使用c语言和ABC这样的高级语言进行开发。他希望开发的一些工具都是为了完成一般的系统管理任务,他想通过Amoeba完成对操作系统系统功能的调用。尽管van Rossum产生了一些为Amoeba开发一种专用语言的想法,但是一种通用的语言更有价值,于是在1989年末,Python的种子被播下了。)

Some of the tools he envisioned(希望) were for performing general system administration tasks, so he also wanted access to the power of system calls that were available through the Amoeba distributed(发布,即支持aba的平台) operating system.

  • (!) (这段太难翻译了,应该找了解python历史的来修订一下, )

    • Chun_ch01.txt :40 但是标准模版库很难与Python内建的列表和字典的简洁性和易读性相比较 <!>

Chun_ch01.txt :45 Python是面向对象的语言,(从) <!> 它的核心支持这一特性。但是,Python不仅仅是像Java或Ruby这样的面向对 <!> 的语言 Chun_ch01.txt : 48 Python却不是这样,您可以在各个项目中增加您的代码,添加其他的新的或者已存在的Python元素,也可以重用您脑海中的代码。

  • (./) (Python却不是这样,您可以在各个项目中增加您的代码,添加其他的新的或者已存在的Python元素,也可以灵活的重用代码。) (!) (and reuse code at your whim(一时的兴致,奇想). )

    • Chun_ch01.txt : 56无论您是访问Python的标准库中的模块,还是访问自己刚刚创建的模块,甚至是访问您用其他的编程语言编写的扩展模块,方式都是一样的。因为 <!> 这个特性,您会觉得似乎按照自己的需要扩展了Python,事实上,确实是这样 <!>

CChun_ch01.txt : 70在各种不同的系统上可以看到Python的身影,这是由于在今天的计算领域,Python取得了快速的成长。

  • (./) (在各种不同的系统上可以看到Python的身影,这加快了Python在今天的计算领域的增长。)

    • (!) (Python can be found on a wide variety of systems, contributing to its continued rapid growth in today’s computing domain. )

CChun_ch01.txt : 214有三种不同的办法来启动Python。最简单的方式就是启动交互式的 <!> 解释器,每次输入一行Python代码 CChun_ch01.txt : 652编写脚本。 <!> 为练习1–4的延续,


  • 第二章


  • 第三章


  • 第四章


  • 第五章


  • 第六章


  • 第七章


  • 第八章


  • 第九章


  • 第十章


  • 十一章


  • 十二章


  • 十三章


  • 十四章


  • 十五章


  • 十六章


  • 十七章


  • 十八章


  • 十九章


  • 二十章


  • 廿一章

Chun_ch21.txt :35 在任何的应用程序中,都需要持久存储。一般说来,有三种基本的存储机 制:文件、关系型数据库或它的一些变种,例如现有系统的API,ORM、文件管理器、电子表格、 配置文件等等。

Chun_ch21.txt :35 在任何的应用程序中,都需要持久存储。一般说来,有三种基本的存储机 制:文件、关系型数据库或 {i} 它的一些变种,例如现有系统的API,ORM、文件管理器、 电子表格、配置文件等等。

Chun_ch21.txt :54 大部分的数据库系统会提供一个命令行工具来执行SQL {i} 命令和查 询,当然也有一些使用图形界面的漂漂亮亮的客户端程序来干同样的事。

Chun_ch21.txt :204 :一个处理 Python 数据库事务 SIG(特殊事务小组?) 因此诞生, 最 后. DB-API 1.0 问世. DB-API 为不同的数据库提供了一致的访问接口, 在不同的数据库之间 移植代码成为一件轻松的事情(一般来说, 只修要修改几行代码). 在本章的后观你会看到类 似的例子.

Chun_ch21.txt :204 :一个处理 Python 数据库事务 {i} SIG(特殊事务小组?) 因 此诞生, 最后. DB-API 1.0 问世. DB-API 为不同的数据库提供了一致的访问接口, 在不同的 数据库之间移植代码成为一件轻松的事情(一般来说, 只修要修改几行代码). 接下来你会看 到这样的例子.

Chun_ch21.txt :260 :如果一个(单位?) <!> 资源被共享, a synchronization primitive such as a spin lock or需要为其建立一个(原子的)同步标志(比如,a spin lock(一种用于多cpu环境的锁有人翻译成 自旋锁(spinlock),)或信号灯?)

Chun_ch21.txt :261 : semaphore is required for atomic-locking purposes. 对这个目标来说, 磁盘文件和全局变量都不可靠, 并且有可能妨碍 . Chun_ch21.txt :262 : mutex(互斥量)的操作. 参阅 threading 模块或第16章(多线程编 程)来了解如何使用锁. 原文 If a resource is shared, a synchronization primitive such as a spin lock or semaphore is required for atomic-locking purposes. Disk files and global variables are not reliable for this purpose and may interfere with standard mutex operation. See the threading module or the chapter on multithreaded programming (Chapter 16) on how to use a lock.

如果一个次资源被共享, a synchronization primitive such as a spin lock or semaphore is required for atomic-locking purposes. 对这个目标来说, 磁盘 文件和全局变量都不可靠, 并且有可能妨碍 . mutex(互斥量)的操作. 参阅 threading 模块或第16章(多线程编程)来了解如何使用锁.

Chun_ch21.txt :270 :函数属性 Function Attribute(s) 个人感觉翻译成 模块(级)函数 好一些

Chun_ch21.txt :332 :兼容标准的模块也应该提供 {i} 这些异常类. 见表 21.4 原文:Exceptions that should also be included in the compliant module as globals are shown in Table 21.4.

Chun_ch21.txt :369 :连接对象没有必须定义的数据属性, {i} 但是它至少应该定义表 21.5中的这些方法.

Chun_ch21.txt :373 :对不支持事务的数据库 <!> 或者虽然支持事务, 但设置了自 动提交(auto-commit)的数据库系统来说, commit()方法什么也不做. Chun_ch21.txt :491 :通常两个不同系统之间接口是很脆弱的. 在Python对象和C类型之间转 换是这样, 反之亦然. 类似的, 在Python对象和原生数据库对象之间也是如此. 对于 Python DB-API 的开发者来说, 你传递给数据库的参数是字符串形式的, 但数据库会根据需要将它转换 为多种不同的形式. 以确保所有(或每次) <!> 查询能被正确执行.

这句话有点别扭, 中文的脆弱用来表示需要很多数据类型转换不太合适,又想不出什么能达意的 词 尝试意译一下 通常两个不同系统的接口要求的参数类型是不一致的,譬如python调用c函数时Python对象和C类 型之间就需要数据格式的转换,反之亦然. 类似的, 在Python对象和原生数据库对象之间也是如 此. 对于 Python DB-API 的开发者来说, 你传递给数据库的参数是字符串形式的, 但数据库 会根据需要将它转换为多种不同的形式. 以确保所有(或每次) <!> 查询能被正确执行.

把技术类英文翻译成通顺的中文真的远比想象的困难啊.在此向所有参加翻译的译者表示敬意.

Oftentimes, the interface between two different systems are the most fragile. This is seen when converting Python objects to C types and vice versa. Similarly, there is also a fine line between Python objects and native database objects. As a programmer writing to Python’s DB-API, the parameters you send to a database are given as strings, but the database may need to convert it to a variety of differ- ent, supported data types that are correct for any particular query.

Chun_ch21.txt :494 :举例来说, 一个 Python 字符串可能被转换为一个 VARCHAR, 或一个 TEXT, 或一个BLOB, 或一个原生 BINARY 对象, 或一个DATE或TIME对象. 一个字符串到底会 被当成什么来处理? 必须小心的尽可能以数据库期望的数据类型来提供输入, 因此另一个DB-API 的需求是创建一个构造器以生成特殊的对象, 以便能够方便的转换为合适的数据库对象. 表21.7 描述了可以用于此目的的类. SQL 的 NULL 值被映射为 Pyhton的 NULL 对象, 也就是 None.

  • Chun_ch21.txt :494 :举例来说, 一个 Python 字符串可能被转换为一个 VARCHAR, 或一个 TEXT, 或一个BLOB, 或一个原生 BINARY 对象, 或一个DATE或TIME对象. 一个字符串到底 会被转换成什么类型 <!> ? 必须小心的尽可能以数据库期望的数据类型来提供输入, 因 此另一个DB-API的需求是创建一个构造器以生成特殊的对象, 以便能够方便的转 {i} python 对象换为合适的数据库对象. 表21.7描述了用于此目的的类. SQL 的 NULL 值被映射 为 Pyhton的 NULL 对象, 也就是 None.

Chun_ch21.txt :546 :增加了新的属性以提供更佳的数据库绑定

Chun_ch21.txt :546 :增加了新的属性以提供更易用的数据库绑定

Chun_ch21.txt :550 :错误改变为基于类的异常

Chun_ch21.txt :550 :基于异常的错误处理

Chun_ch21.txt :553 :自从 DB-API 2.0 发布以来, 一些可选的 DB-API扩展在2002年加入 进来, 但一直没有什么重大的变更.

Chun_ch21.txt :553 :自从 DB-API 2.0 发布以来, 曾经在2002年加入了一些可选的 DB- API扩展, 但一直没有什么重大的变更.

Chun_ch21.txt :560 :提高参数风格的灵活性和支持

Chun_ch21.txt :560 :支持更灵活的参数风格

Chun_ch21.txt :581 :现在我们准备开始, 一个问题摆在面前, 在Pyhton 里我可以使用哪种 数据库接口? 换言之, Python支持哪种平台? 答案是几乎所有的平台. 下面是一个不怎么完整 的数据库支持列表:

pyhton :) Python支持哪些平台

Chun_ch21.txt :637 :这里我们使用 MySQL 数据库, 使用唯一的 MySQL 接口程序: MySQLdb, 这个接口程序又名 MySQL-python. 在这部分代码里, 我们故意在例子里埋下一个错 误

Chun_ch21.txt :637 :这里我们以 MySQL 数据库为例, 使用唯一的 MySQL 接口程序: MySQLdb, 这个接口程序又名 MySQL-python. 在这部分代码里, 我们故意在例子里犯下一个错 误

全文有很多处 他 和 它 的混合使用,建议统一成 它

Chun_ch21.txt :815 :对这个例子来说中, 我们仍然使用两个其它的开源数据库. SQLite 现 如今已经相当流行. 它体积小, 而且足够快, 是一个几乎拥有全部功能的相当轻量级的数据库. 这个例子中用到的另一个数据库是 Gadfly, 一个基本兼容 SQL 的纯 Python 写成的关系数据 库. (某些关键的数据库结构有一个C模块, 不过 Gadfly 没有它也一样可以运行[当然, 会慢不 少, 嘿嘿]).

在这个例子中, 我们将使用三个的开源数据库,

  • 根据下文 另外两个 指的是Gadfly, SQLite ,而SQLite刚刚才提过, 强烈怀疑原作者写

这些东西的时候在睡觉.

  • 好多地方感觉重复

Chun_ch21.txt :1109 :首先, 通过 fetchall() 方法读取数据, 然后循环每个用户, 将三 列数据(login, uid, prid)转换为字符串(如果它们还不是的话), 并将姓和名的首字母大写, 再格式化整个字符为左对齐的COLSIZ列.(右边留白) . 由代码生成的字符串是一个列表(通过智 能列表 list comprehension), 我们需要将它们转换成一个元组以支持 % 运算符.

Chun_ch21.txt :1109 :首先, 通过 fetchall() 方法读取数据, 然后迭代遍历每个用户, 将三列数据(login, uid, prid)转换为字符串(如果它们还不是的话), 并将姓和名的首字母大 写, 再格式化整个字符为左对齐的COLSIZ列.(右边留白) . 由代码生成的字符串是一个列表(通 过智能列表(翻译成 列表理解,或列表映射(dive in python)吧),list comprehension), 我们需要将它们转换成一个元组以支持 % 运算符.

Chun_ch21.txt :1125 :这些系统的创建者将绝大多数纯 SQL层功能抽象为Python对象, 这样 你就无需编写SQL也能够完成同样的任务. 如果你在某些情况下实在需要SQL, 有些系统也允许你 拥有这种灵活性. 但绝大多数情况下, 你应该尽量避免进行直接的SQL查询.

Chun_ch21.txt :1128 :数据库的表被转换为 Python类, 它具有列属性和操作数据库的方 法. 让你的应用程序支持 ORM 非常类似那些标准的数据库接口程序. 由于大部分工作由 ORM 代 为处理, 相比直接使用接口程序来说, 一些事情可能实际需要更多的代码. 另人欣慰的是, 一点 点额外的付出会回报你更高的生产率.

Chun_ch21.txt :1128 :数据库的表被转换为 Python类, 它具有列属性和操作数据库的方 法. 让你的应用程序支持 ORM 非常类似 {i} 使用那些标准的数据库接口程序. 由于大部分 工作由 ORM 代为处理, 相比直接使用接口程序来说, 一些事情可能实际需要(产生?)更多的代 码. 另人欣慰的是, 一点点额外的付出会回报你更高的生产率.

  • Database tables are magically converted to Python classes with columns

and features as attributes and methods responsible for database operations. Setting up your application to an ORM is somewhat similar to that of a stan- dard database adapter. Because of the amount of work that ORMs perform on your behalf, some things are actually more complex or require more lines of code than using an adapter directly. Hopefully, the gains you achieve in productivity make up for a little bit of extra work.

Chun_ch21.txt :1138 :其它的 Python ORM 包括 PyDO/PyDO2, PDO, Dejavu, Durus, QLime和 ForgetSQL. 一些大型的Web开发工具/框架也可以有自己的 ORM 组件, 如果 (如) WebWare MiddleKit 和 Django 的数据库 API.需要指出的是, 知名的 ORM 并不意味 着就是最适合你的应用程序的ORM. 这 (那) <!> 些其它的 ORM 虽然没有纳入我们的讨 论范围, 但一样有可能是适合你的应用程序的选择.

类的构造器 一般就叫类的构造函数吧

Chun_ch21.txt :1646 :类似我们的SQLAlchemy 例子, 类的构造器做了大量工作以确保 有一个数据库可用, 然后返回一个连接. 同样的, 这也是你能在程序里看到SQL语句的唯一位 置. 我们这个程序, 如果因为某种原因造成SQLObject无法成功创建用户表, 就会陷入无限循环 当中.

Chun_ch21.txt :1649 :我们尝试能够聪明的处理错误, 解决掉这个重建表的问题. 因为 SQLObject 使用元类, 我们知道 {i} 类得创建幕后发生特殊事件, 所以我们不得不定义两 个不同的类, 一个用于表已经存在的情况, 一个用于表不存的情况. 代码工作原理如下:

Chun_ch21.txt :1845 :关于如何在python中使用关系型数据库, 希望我们前面介绍的东西对 你有用. 当你应用程序的需求超出纯文本或类似DBM等特殊文件的能力时, 有多种数据库可以选 择, 不用考虑一个完全由Python实现的真正的免安装维护和管理的真实数据库系统. 你能在下面 找到多种Python数据库接口程序和 ORM系统. 我们也建议你研究一下互联网上的 DB-SIG 的网 页和邮件列表. 类似其它领域的软件开发, 只不过 Python 更简单易学, 用户体验更好.

Chun_ch21.txt :1845 :关于如何在python中使用关系型数据库, 希望我们前面介绍的东西对 你有用. 当你应用程序的需求超出纯文本或类似DBM等特殊文件的能力时, 有多种数据库可以选 择, 别忘了 还有一个完全由Python实现的真正的免安装维护和管理的真实数据库系 统. 你能在下面找到多种Python数据库接口程序和 ORM系统. 我们也建议你研究一下互联网上 的 DB-SIG 的网页和邮件列表. 类似其它的软件开发领域, <!> Python 更简单 易学, 用户体验更好. Like all other areas of software development, Python makes things easy to learn and simple to experiment with.


  • 廿二章


  • 廿三章