对于非常大的整数范围,应该使用xrange
(Python2),在Python3中将其重命名为range
。我假设模块six
可以提供一个一致的写入原因。
但是我发现six.moves.builtins.range
在Python2中返回一个列表,在Python3中返回一个可迭代的非列表对象,就像名称range
一样。
而且,Python2中不存在six.moves.builtins.xrange
。
我在six
中使用了错误的函数吗?还是六种方法根本不为range
和xrange
函数提供解决方案?
我知道我可以测试sys.version[0]
并相应地重命名函数。我只是想找个“别重复你自己”的解决方案。
附文
正如姆吉尔森所提到的:
>>> import six
>>> six.moves.range
AttributeError: '_MovedItems' object has no attribute 'range'
是与six
的版本有关,还是没有six.moves.range
之类的东西?
发布于 2014-02-28 05:30:29
我相信你只是想要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
https://stackoverflow.com/questions/22086804
复制相似问题