对于非常大的整数范围,应该使用xrange
(Python 2),它在Python 3中重命名为range
。我假设模块six
可以提供一致的写作原因。
但我发现 six.moves.builtins.range
在 Python 2 中返回一个列表,在 Python 3 中返回一个可迭代的非列表对象,就像名称 range
一样.
此外,Python 2 中不存在 six.moves.builtins.xrange
。
我在 6
中使用了错误的函数吗?还是 six 根本没有为 range
和 xrange
函数提供解决方案?
我知道我可以测试 sys.version[0]
并相应地重命名函数。我只是在寻找“不要重复自己”的解决方案。
追加
正如 mgilson 所提到的:
>>> import six
>>> six.moves.range
AttributeError: '_MovedItems' object has no attribute 'range'
是不是和six
的版本有关,还是没有six.moves.range
之类的东西?
最佳答案
我相信你只是想要six.moves.range
。不是,six.moves.builtins.range
。
>>> # tested on python2.x..
>>> import six.moves as sm
>>> sm.range
<type 'xrange'>
这里的原因是 six.moves.builtins
是与版本无关的“内置”模块。这只是让您可以访问内置函数——它实际上并没有改变任何内置函数是。
通常,我觉得在这种情况下不需要引入外部依赖。我通常只是在源文件的顶部添加这样的内容:
try:
xrange
except NameError: # python3
xrange = range
关于python - six.moves.builtins.range 在 Python 2 和 Python 3 中不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22086804/