[英]Portable, memory efficient range() for Python 2.x and Python 3.x
我知道Python 2.x中range
的缺点(它创建了一个对大范围来说效率低下的列表)并且它更快的迭代器对应的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
但我正在考虑一些不那么黑客而不是定制的东西。
另一种方法是使用Six模块,它提供简单的实用程序来包装Python 2和Python 3之间的差异。它旨在支持无需修改即可在Python 2和3上运行的代码库。
不要担心xrange()
,2to3只是将其转换为range()
。 但是如果你正在编写一个可移植代码,那么一个好主意就是创建例如compat.py
文件,在其中导入cross-python功能。 例如,请参阅pymongo来源: https : //github.com/mongodb/mongo-python-driver/blob/master/bson/py3compat.py
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.