python - 任何 __future__ 导入 range-xrange 不兼容?

标签 python

为 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/

相关文章:

python - 提交使用 Scrapy 动态呈现的表单?

python - 在 Python 中的矩形内查找整数点?

python - 交换数据框中列的内容

Python 插值不适用于行

python - 如何获得多维数组的填充切片?

列表中的Python CSV多个数字

python - 类型错误 : conv2d(): argument 'input' (position 1) must be Tensor, 不是字符串

python - 使用中序二叉树实现的列表

python - python 中类方法和静态变量的行为

python - 使用共享 C 库的 3D numpy 数组迭代