《Dive Into Python 3》翻译 #负一章

负一章 - 深入 Python 3 中有什么新内容


“这不正是我们进来的地方吗”

— Pink · Floyd, The Wall

-1.1 又被称为 “THE MINUS LEVEL”

你已经是一个 Python 程序员了吗?你读过原版的 《深入 Python》了吗?你买纸质书了吗?(如果买了,谢谢你!)你准备好冒险进入 Python 3 了吗?如果都做到了,请接着读。(如果没有,你最好从头开始)

伴随着 Python 3 一起来的还有一个被叫做 2to3 的脚本。学习它,爱上它,使用它。《用 2to3 移植代码到 Python 3》是一个 2to3 工具可以自动修复的所有事情的参考书。由于许多改变都是语法上的,所以先了解这些在 Python 3 中的语法变化真的是一个好的开始。

案例学习:“ 把 Chardet 移植到 Python 3 ” 记录了在我的努力下(最终成功了)把一个不平常的库从 Python 2 移植到 Python 3。它可能对你有帮助,也可能没有。由于你需要先理解这个库,才能理解它为什么中断了和我怎么修复了它,因此这个学习曲线是相当陡峭。许多损坏都围绕着 Strings,说起这个...

Strings,吁,从哪说起呢,Python 2 有 “Strings” 和 “Unicode(统一码) Strings”。Python 3 中有 “Bytes” 和 “Strings”。这就是说,现在所有的 Strings 都是 Unicode Strings ,而且如果你想要处理一堆 bytes,你可以使用新的 bytes 类型,Python 3 永远不会在 Strings 和 bytes 之间进行隐式转换,所以如果你不确定在哪些时候使用哪种类型,你的代码肯定会中断。想要了解更多的细节可以阅读 the Strings Chapter。

在这本书中,Bytes 和 Strings 的比较将会反复出现。

  • 在《文件》(Files) 中,你会学习“二进制”和“文本”这两种读取文件的模式之间的不同之处,以文本模式读取(写入也是!)文件要求一个 encoding 参数,一些文本文件的方法按照字符计数,但是其他的方法却按照字节计数。如果你的代码中假定一个字符等于一个字节,当遇到多字节字符的时候就会中断。
  • 在《HTTP 网页服务》(HTTP Web Services) 中,httplib 2 模块通过 HTTP 接受 headers 和 data。HTTP headers 以 strings类型返回,而 HTTP body 以 bytes 类型返回。
  • 在《可序列化 Python 类》(Serializing Python Objects) 中,你将会学习到为什么 pickle 模块这个在 Python 3 中定义的新的数据格式会不与 Python 2 向后兼容(提示:因为 bytes 和 strings)。此外,Python 3 还支持可序列化类与 JSON 之间相互转换,尽管 JSON 都不是 bytes 类型。我将会给你展示这是怎么做到的。
  • 在案例学习:把 chardet 移植到 Python 3 中,到处都是 bytes 和 strings。

即使你不关心 Unicode(但是你会关心的),你也会想读读 Python 3 中的字符串格式 (string formatting in Python 3),它和 Python 2 中的完全不同。

在 Python 3 中到处都是迭代器 (Iterators),我现在比五年前写《深入 Python》的时候能更好的理解它们了,你也要理解它们,因为很多之前在 Python 2 中返回列表 (lists) 的函数,现在变成返回迭代器了。你最少也得读一读迭代器这章的后半部分和高级迭代器这章的后半部分。

应广大程序猿的要求,我已经在附录上增加了《特殊方法名称》这一部分,这有点像 Python 文档的《数据模型 (data model) 》这章,但是更加鬼魅。

当我写《深入 Python》的时候,所有能获取到的 XML 库都有问题。后来Fredrik Lundh编写了 ElementTree ,这些就都变好了。Python 领域的偶像们很明智地 把 ElementTree 纳入到标准库中 ,现在也形成了我新写的XML那章的基础。老的对 XML 进行解析的方法仍然能用,但是你最好别用,因为它们真的都很糟糕。

在 Python 中另外的新东西,不在语言而在社区,出现了像 Python 软件包大全 (The Python Package Index, PyPI) 这样的代码仓库, Python 带来了把你的代码用标准格式打包然后发行到 PyPI 上的实用工具。想要了解细节请阅读打包 Python 库 (Packaging Python Libraries) 这一章。

One Reply to “《Dive Into Python 3》翻译 #负一章”

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.