您当前位置:主页 ‣ 深入 Python 3 ‣
❝ 我们不是从这里开始的吗? ❞
— Pink Floyd,The Wall
您已经是 Python 程序员了吗?您阅读过原始的“深入 Python”吗?您在纸上购买了它吗? (如果是,谢谢!)您准备好开始学习 Python 3 吗? … 如果是,请继续阅读。(如果不是,您最好从开始学习。)
Python 3 附带一个名为 2to3
的脚本。学习它。爱上它。使用它。使用 2to3
将代码移植到 Python 3 是所有 2to3
工具可以自动修复的事项的参考。由于其中很多是语法更改,因此它是学习 Python 3 中许多语法更改的良好起点。(print
现在是一个函数,`x`
不起作用,&c。)
案例研究:将 chardet
移植到 Python 3 记录了我(最终成功)将一个非平凡库从 Python 2 移植到 Python 3 的过程。它可能对您有所帮助;也可能没有。这是一个相当陡峭的学习曲线,因为您首先需要了解该库,这样您才能了解它为什么崩溃以及我如何修复它。很多崩溃都集中在字符串上。说到字符串…
字符串。哇。从哪里开始。Python 2 有“字符串”和“Unicode 字符串”。Python 3 有“字节”和“字符串”。也就是说,现在所有字符串都是 Unicode 字符串,如果您想处理一组字节,可以使用新的 bytes
类型。Python 3 绝不会 在字符串和字节之间进行隐式转换,因此,如果您不确定在任何给定时刻拥有的是哪一个,您的代码几乎肯定会崩溃。阅读字符串章节 以了解更多详细信息。
字节与字符串在整本书中反复出现。
encoding
参数。一些文本文件方法计算字符,但其他方法计算字节。如果您的代码假设一个字符 == 一个字节,它将在多字节字符上崩溃。httplib2
模块通过 HTTP 获取标头和数据。 HTTP 标头以字符串形式返回,但 HTTP 主体以字节形式返回。pickle
模块定义了一种与 Python 2 向后不兼容的新数据格式。(提示:这是因为字节和字符串。)此外,Python 3 支持将对象序列化到 JSON 中以及从 JSON 中序列化对象,JSON 甚至没有 bytes
类型。我将向您展示如何解决这个问题。chardet
移植到 Python 3 中,它只是一团糟,到处都是字节和字符串。即使您不关心 Unicode(哦,但您会关心),您也需要了解Python 3 中的字符串格式化,它与 Python 2 完全不同。
迭代器在 Python 3 中无处不在,我比五年前写“深入 Python”时更了解它们。您也需要了解它们,因为在 Python 2 中曾经返回列表的许多函数现在将在 Python 3 中返回迭代器。至少,您应该阅读迭代器章节的后半部分 和高级迭代器章节的后半部分。
根据用户的要求,我在特殊方法名称 上添加了一个附录,它有点像 Python 文档“数据模型”章节,但更尖酸刻薄。
当我写“深入 Python”时,所有可用的 XML 库都很糟糕。然后 Fredrik Lundh 写了 ElementTree,它一点也不糟糕。Python 之神明智地将 ElementTree 集成到标准库中,现在它构成了我新的 XML 章节 的基础。解析 XML 的旧方法仍然存在,但您应该避免使用它们,因为它们很糟糕!
Python 中的另一个新东西——不是语言本身,而是社区——是代码库的出现,例如 Python 包索引 (PyPI)。Python 附带实用程序来以标准格式打包您的代码,并将这些包分发到 PyPI 上。阅读打包 Python 库 以了解更多信息。
© 2001–11 Mark Pilgrim