写作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.