gpt4 book ai didi

python - from __future__ import ... 可以保证 Python 2 和 3 的兼容性吗?

转载 作者:太空狗 更新时间:2023-10-29 17:39:05 29 4
gpt4 key购买 nike

我对预热“Python 2 还是 Python 3?”不感兴趣问题(尽管 the most recent one 我发现已经超过一年了),但我偶然发现了 this claim :

You can write the Python 3 code under Python 2 if your file begins with the line:

from __future__ import absolute_import, division, generators, unicode_literals, print_function, nested_scopes, with_statement

With that line in place, your code will work with either Python 2 or Python 3. There may be rare cases in which it doesn't work, but I have not found any,

这是真的吗?这一行是否足以确保您编写的代码将在 Python 2.x(>=2.5 我假设)和 3.x(假设导入的模块在两者中都可用)上运行?

最佳答案

我会说不,这是胡扯。即使有了这些导入,Python 2 和 3 之间仍然存在显着差异:例如,Python 3 中的 input() 类似于 Python 2 中的 raw_input(); Python 3 中的 range() 类似于 Python 2 中的 xrange()。在 xrange() 的情况下,您可能可以使用range() 在 Python 2 中,只要范围很小,但如果它们很大,您的程序在 Python 2 和 Python 3 下的内存使用可能会有很大不同。

你可以在你的代码中添加这样的东西:

try:
range = xrange
input = raw_input
except NameError:
pass

但随后您必须找到所有这些边缘情况并修复它们。例如,dictkeys()values() 方法在 Python 3 中返回迭代器,但在 Python 2 中返回列表,所以你需要编写一个 dict 子类来“修复”它(然后永远不要在你的代码中使用字典文字而不包装它们,因为否则它们将属于内置的 dict 类型)。

我想,通过使用 __future__ 和各种修复,并限制自己在 Python 子集中编写代码,这样创建的代码将在 2.x 和 3.x 下运行,编写在两个版本中运行的代码是可能的。不过看起来工作量很大。 2to3 实用程序是有原因的...

关于python - from __future__ import ... 可以保证 Python 2 和 3 的兼容性吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11103099/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com