C.3 迁移工具
正如你所看到的,Python 3.x中的大多数变化并不代表Python语法的一些巨大变化。相反,这些变化刚好足以打破旧有的代码库。当然,这些变化都会影响用户,所以很明显需要一个很好的过渡计划,而大多数好的计划都来自于好的工具或者有助于平滑过渡。这种工具包括(但不限于)以下这些:2 to 3代码转换器、最新版本的Python 2.x(至少2.6),以及外部(非标准库)3 to 2工具和six库。这里将讨论前两个工具,剩下的几个读者可以自行研究。
C.3.1 2to3工具
2to3工具将接收Python 2.x代码,并尝试生成Python 3.x下的功能相同的可行代码。以下是它执行的一些操作。
将print语句转换为print()函数。
删除长整型后缀L。
用"!"=替换"<>"。
将单反引号字符串('…')改成repr(…)。
这个工具做了很多手工劳动,但并不是所有的事情,剩下的事情就只能靠你了。可以在“Python 3.0 中的新特性”(What’s New in Python 3.0)文档或者该工具的网站(http://docs.python.org/3.0/library/2to3.html)上详细了解关于移植的建议和2to3工具。附录D中将简要提及一个名为3to2的配套工具。
C.3.2 Python 2.6+
由于兼容性问题,Python版本的发行导致了Python 3.0在代码转变中扮演着更重要的角色。需要特别注意的是 Python 2.6,它是这种发行版本中第一个也是最关键的版本。对于用户来说,这代表第一次他们可以开始编写针对Python 3.x系列的代码,因为很多Python 3.x的特性已经移植到2.x版本中。
只要有可能,最终的2.x发行版本(2.6及更新版本)嵌入了3.x版本中的新功能和语法,同时在不删除旧有特性或语法的情况下保持与现存代码的兼容性。“Python 2.x 中的新特性”(What’s New in Python 2.x)文档描述了所有发行版本的这种特性。附录D将详细介绍其中的一些移植特性。
