Tob*_*ler 12 python python-2.x python-3.x
我对升级"Python 2还是Python 3?"不感兴趣.问题(即使我发现的最近一个是超过一年),但我偶然发现了这个说法:
如果您的文件以该行开头,您可以在Python 2下编写Python 3代码:
Run Code Online (Sandbox Code Playgroud)from __future__ import absolute_import, division, generators, unicode_literals, print_function, nested_scopes, with_statement
有了这一行,您的代码将适用于Python 2或Python 3.可能有少数情况下它不起作用,但我没有找到任何,
这是真的?这条单行是否足以确保您编写的代码将在Python 2.x(> = 2.5我假设)和3.x(假设导入的模块都可用)中运行?
我会说不,这是胡扯.即使使用这些导入,Python 2和3之间仍然存在显着差异:例如,input()
在Python 3中就像raw_input()
在Python 2中一样; range()
在Python 3中就像xrange()
在Python 2中一样.只要范围很小,xrange()
你就可以range()
在Python 2中使用它,但如果它们很大,那么你的程序在Python 2和Python 2下可能会有非常不同的内存使用量. Python 3.
您可以在代码中添加以下内容:
try:
range = xrange
input = raw_input
except NameError:
pass
Run Code Online (Sandbox Code Playgroud)
但是你必须找到所有这些边缘情况并修复它们.例如,也有keys()
和values()
方法dict
在Python 3中返回迭代器,但列出了在Python 2,所以你需要编写一个dict
子类,"修复"是(从来就不是在代码中使用的字典文字没有包装他们,因为否则将是内置dict
类型).
我想,通过使用__future__
和各种修复,并限制自己编写代码在这样创建的Python的子集中,它将在2.x和3.x下运行,有可能编写在两者中运行的代码版本.看起来好像很多工作.有一个2to3
实用的原因......
"这取决于"
否:将这些导入添加到Python 2代码中将不会使其在Python 3下运行.
是的:使用这些导入,您可以编写在Python 2和Python 3下运行的代码.
但是:再说一遍,你可以在没有这些进口的情况下做到这一点,其中一些,例如unicode_literals
已经证明根本没有帮助.generators
并且with_statement
与Python 2到Python 3完全没有关系,这些是Python 2版本中添加的功能.
总而言之,这些进口产品有点像红鲱鱼,而且这种说法比错误更为错误.
但是,这并不意味着编写在Python 2和Python 3下运行的代码是不可能的,甚至是非常困难的.有关详细信息,请参阅http://python3porting.com/.
归档时间: |
|
查看次数: |
4718 次 |
最近记录: |