内容
- [如何更新Python2to3]目录
概述
从2到3系列更新Python时,在2和3系列之间有许多不兼容的部分,因此可能有必要修改代码。
这可能是一个主要障碍,但是有一些有用的工具可以自动为您翻译代码。
在这里,我将比较2to3和futurize,它们似乎易于使用。
2to3和futurize
之间的区别
两者是非常不同的部分,因此本文将仅解释不同之处。
本文的目的是帮助您确定哪种环境最适合您。
每种方法的详细用法如下所述,因此如果需要请参考它。
- [Python2to3更新] 2to3自动源代码转换
- [Python2to3更新方法]使用futurize安全地自动进行源代码转换
2to3是什么?
Python的标准模块。
它会自动将2系列的源重写为3系列。
您也可以编写自己的转换程序。
这是一个比将来更简单的工具。
参考:2to3-docs.python.org
futurize
一个基于2to3的模块,可以自动将2系列的源重写为3系列。
与2to3的区别在于,这是与使用2to3的情况不同的实现方式,因为已合并了future模块,因此源代码可以与Python2系列或3系列一起使用。
参考:自动转换为Py2 / 3
2to3和未来
之间的特定区别
在
中,我们将验证2to3和futurize中实现的内容如何不同。
示例代码
使用以下代码,分别进行2to3转换和futurize,并验证执行结果。
由于以下分割的结果在Python 2系列和3系列之间是不同的,因此当执行以下代码时,
参考:Python 2系列和3系列之间的区别-关于除法小数点以下的处理
sample.py
1 2 | # -*- coding:utf-8 -*- print(1/2) |
在使用2to3进行转换的情况下,为
用
2to3转换时,其转换如下。 (几乎没有区别)
sample.py
1 2 | # -*- coding:utf-8 -*- print((1/2)) |
在2个系统中执行转换后的代码
1 2 | $ python sample.py 0 |
在3个系统中执行转换后的代码
1 2 | $ python sample.py 0.5 |
当然,第二和第三系统的执行结果是不同的。
未来翻译时
在进行futurize的stage2中的代码转换时,将其转换为以下实现。
sample.py
1 2 3 4 5 | # -*- coding:utf-8 -*- from __future__ import print_function from __future__ import division from past.utils import old_div print(old_div(1,2)) |
在2个系统中执行转换后的代码
1 2 | $ python sample.py 0 |
在3个系统中执行转换后的代码
1 2 | $ python sample.py 0 |
实现为无论转换后的代码是在第二系统还是第三系统中执行,都将返回相同的结果。
其他差异
futurize具有阶段性的概念,因此理想的做法是分两步将代码从2个系统更新为3个系统。目标不是分一次更改代码,而是通过分两个阶段执行来避免风险。
另一方面,在2to3中,没有采取步骤的概念。可以说2to3更简单。
有关未来化阶段的详细信息,请参见下文。
参考:有关将来的阶段,请参见
摘要
这样,futurize和2to3不仅在实现细节上有所不同,而且在执行结果以及代码转换的方法和概念上也有所不同。
我认为使用哪种决定取决于环境,因此最好在了解每种工具之间的差异后做出决定。
相关文章
- [Python2to3更新方法] 2to3自动源代码转换
- [Python2to3更新方法]使用futurize安全地自动进行源代码转换