范围 - xrange不兼容的任何__future__导入?

时间:2015-06-30 11:13:21

标签: python

写入Python 2,我总是使用xrange,但它在Python 3中重命名。 所以我主要写

if sys.version.startswith('3'):
    zrange = range
else:
    zrange = xrange

并使用下面的zrange。是否有一个更优雅的解决方案(不依赖于第三方包),如from __future__ import unicode_literal希望?

1 个答案:

答案 0 :(得分:13)

不,此处没有from __future__导入,您也不需要使用第三方软件包。当xrange不可用时,只需捕获名称错误:

try:
    zrange = xrange
except NameError:
    zrange = range

没有必要测试版本。

就我个人而言,我不会在Python 2上重新使用range,而不是新名称:

try:
    # Python 2
    range = xrange
except NameError:
    # Python 3
    pass

或在Python 3中添加xrange作为别名:

try:
    # Python 2
    xrange
except NameError:
    # Python 3
    xrange = range

仅在Python 2中重新分配range是可取的,因为前进一个项目更有可能放弃Python 2支持并专注于Python 3语法,而不是相反。

需要同时支持Python 2和Python 3的软件包通常会创建一个compat模块来处理这些网桥。例如,请参阅requests.compat module,它们仅使用版本测试,因为这会将测试次数限制为只有一个if