【发布时间】:2018-01-08 16:36:52
【问题描述】:
我正在更改一些 Python 2 代码以与 Python 2 和 Python 3 兼容。翻译工具 2to3 可以很好地将 Python 2 代码转换为不一定与 Python 2 代码兼容的 Python 3 代码。一个例子是它如何将x.iteritems() 转换为x.items()。对于所有 Python 代码,我可能需要将 x.iteritems() 自动转换为 list(x.items()),等等。
如何做到这一点?
【问题讨论】:
-
"我可能需要将 x.iteritems() 自动转换为 list(x.items())" 嗯,但这并不等同......无论如何,你可能想检查一下出six
-
@juanpa.arrivillaga 是的,这就是重点。我需要将仅与 Python 2 兼容的代码自动更改为与 both Python 2 和 Python 3 兼容。
2to3工具似乎将代码转换为兼容 仅适用于 Python 3。 -
x.items()怎么不兼容 Python 2? -
@chepner 在 Python 2 中
x.items()返回一个 (key, value) 对的列表,而在 Python 3 中x.items()是一个必须迭代的itemview对象,所以list(x.items())需要替换 Python 2 中的x.items()。 -
但是你的原始 Python 2 中没有
x.items();你有iteritems()。在 2 和 3 下运行时,您提议的更改会产生相同的语义,但仍会更改原始语义。如果不使用2to3,没有一种方法可以同时保留 2 和 3 下的原始语义。
标签: python python-3.x python-2to3