为 Python 2 编写,我一直使用 xrange
,但在 Python 3 中已重命名。
所以我主要写
if sys.version.startswith('3'):
zrange = range
else:
zrange = xrange
并使用下面的 zrange
。是否有更优雅的解决方案(不依赖于第 3 方包),例如 from __future__ import unicode_literal
希望如此?
最佳答案
不,没有 from __future__
import 为此,您也不需要使用第三方包。当 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
。
关于python - 任何 __future__ 导入 range-xrange 不兼容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31136713/