写入Python 2,我总是使用xrange
,但它在Python 3中重命名。
所以我主要写
if sys.version.startswith('3'):
zrange = range
else:
zrange = xrange
并使用下面的zrange
。是否有一个更优雅的解决方案(不依赖于第三方包),如from __future__ import unicode_literal
希望?
答案 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
。