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

Fro*_*ame 9 python

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

if sys.version.startswith('3'):
    zrange = range
else:
    zrange = xrange
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*ers 13

不,没有from __future__导入,也不需要使用第三方包.当xrange没有时,只需捕获名称错误:

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

没有必要测试版本.

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

try:
    # Python 2
    range = xrange
except NameError:
    # Python 3
    pass
Run Code Online (Sandbox Code Playgroud)

或者xrange在Python 3中添加别名:

try:
    # Python 2
    xrange
except NameError:
    # Python 3
    xrange = range
Run Code Online (Sandbox Code Playgroud)

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

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

  • 本打算写的相同,但不确定这是否比OP自己的代码更优雅*. (3认同)