six.moves.builtins.range在Python 2和Python 3中不一致

Fro*_*ame 3 python portability

对于一个非常大的整数范围,xrange应该使用(Python 2),它range在Python 3中重命名.我假设模块six可以提供一致的写作原因.

但我发现six.moves.builtins.range在Python 2中返回一个列表,在Python 3中返回一个可迭代的非列表对象,就像名字range一样.

此外,six.moves.builtins.xrangePython 2中不存在.

我使用了错误的功能six吗?或者六个根本没有提供rangexrange功能的解决方案?

我知道我可以相应地测试sys.version[0]和重命名该功能.我只是在寻找"不要重复自己"的解决方案.

附加

如mgilson所述:

>>> import six 
>>> six.moves.range
AttributeError: '_MovedItems' object has no attribute 'range'
Run Code Online (Sandbox Code Playgroud)

它是与版本相关的东西six,还是没有这样的东西six.moves.range

mgi*_*son 10

我相信你只是想要six.moves.range.不,six.moves.builtins.range.

>>> # tested on python2.x..
>>> import six.moves as sm
>>> sm.range
<type 'xrange'>
Run Code Online (Sandbox Code Playgroud)

这里的原因是six.moves.builtins版本不可知的"内置"模块.这只是给你访问建宏-它实际上并没有改变什么任何建宏.

通常,我觉得不需要在这种情况下引入外部依赖.我通常只是在我的源文件的顶部添加这样的东西:

try:
    xrange
except NameError:  # python3
    xrange = range
Run Code Online (Sandbox Code Playgroud)