我对热身“Python 2 还是 Python 3?”不感兴趣。问题(尽管最近的一个 https://stackoverflow.com/q/5478518/321973我发现已经一岁多了),但我偶然发现:
如果您的文件开始,您可以在 Python 2 下编写 Python 3 代码
与行:
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 3 下的内存使用情况可能会非常不同。
您可以在代码中添加如下内容:
try:
range = xrange
input = raw_input
except NameError:
pass
但接下来你必须找到所有这些边缘情况并修复它们。例如,有keys()
and values()
的方法dict
在 Python 3 中返回迭代器,但在 Python 2 中返回列表,因此您需要编写一个dict
“修复”这个问题的子类(然后永远不要在代码中使用字典文字而不包装它们,因为否则它们将是内置的dict
type).
我想,通过使用__future__
以及各种修复,并且通过限制自己在由此创建的可在 2.x 和 3.x 下运行的 Python 子集中编写代码,就有可能编写在两个版本中运行的代码。不过,看起来工作量很大。有一个理由有一个2to3
公用事业...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)