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

2024-05-28 18:11:12 发布

您现在位置:Python中文网/ 问答频道 /正文

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

但是我发现six.moves.builtins.range在Python 2中返回一个list,在Python 3中返回一个iterable non-list对象,就像range这个名字一样。

另外,six.moves.builtins.xrange在Python 2中不存在。

我在six中使用了错误的函数吗?或者说,six仅仅没有为rangexrange函数提供解决方案?

我知道我可以测试sys.version[0],并相应地重命名函数。我只是在寻找一个“不要重复你自己”的解决方案。

追加

如mgilson所述:

>>> import six 
>>> six.moves.range
AttributeError: '_MovedItems' object has no attribute 'range'

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


Tags: 模块函数range原因整数解决方案iterable中将
1条回答
网友
1楼 · 发布于 2024-05-28 18:11:12

我相信你只是想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

相关问题 更多 >

    热门问题