4

我知道rangePython 2.x 的缺点(它创建了一个对大范围来说效率低下的列表)并且它是更快的迭代器对应物xrange。然而,在 Python 3.x 中,range是一个迭代器并被xrange删除。有没有办法编写用 Python 2.x 和 Python 3.x 编写的这两个循环,以使代码可移植并使用迭代器?

# Python 2.x
for i in xrange(a_lot):
    use_i_in_someway(i)

# Python 3.x
for i in range(a_lot):
    use_i_in_someway(i)

我知道有人可能会做类似的事情

if(platform.python_version_tuple()[0] == '3'):
    xrange = range

但我正在考虑一些不那么hack-ish而不是定制的东西。

4

2 回答 2

2

一种替代方法是使用Six模块,它提供了简单的实用程序来包装 Python 2 和 Python 3 之间的差异。它旨在支持无需修改即可在 Python 2 和 3 上工作的代码库。

于 2013-02-14T10:15:53.700 回答
1

不用担心xrange(),2to3 只是将其转换为range(). 但是,如果您正在编写可移植的代码,那么一个好主意是创建例如compat.py文件,您可以在其中导入跨 python 功能。例如查看 pymongo 源:https ://github.com/mongodb/mongo-python-driver/blob/master/bson/py3compat.py

于 2013-02-14T09:40:22.020 回答