繁体   English   中英

适用于Python 2.x和Python 3.x的便携式内存高效范围()

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM