向Python 2"回归"Python 3的"范围"是一个坏主意吗?

Rei*_*ica 11 python python-2.x python-3.x

我的一个课程要求在Python中完成作业,作为练习,我一直在确保我的程序在Python 2和Python 3中都能正常工作,使用如下脚本:

#!/bin/bash
# Run some PyUnit tests
python2 test.py
python3 test.py
Run Code Online (Sandbox Code Playgroud)

我一直在做的一件事是range使用这段代码在两个版本中使工作相同:

import sys

# Backport Python 3's range to Python 2 so that this program will run
# identically in both versions.
if sys.version_info < (3, 0):
    range = xrange
Run Code Online (Sandbox Code Playgroud)

这是一个坏主意吗?

编辑:

这样做的原因是,xrangerange工作方式不同在Python 2和Python 3,我希望我的代码做同样的事情在这两个.我可以反过来做,但让Python 3像Python 2一样工作似乎很愚蠢,因为Python 3是"未来".

这是一个为什么只是使用range不够好的例子:

for i in range(1000000000):
    do_something_with(i)
Run Code Online (Sandbox Code Playgroud)

我显然没有使用该列表,但在Python 2中,这将使用疯狂的内存量.

Ned*_*ily 9

您可以使用提供Python 2和3兼容库的六个软件包,并由一个Python核心开发人员编写.其功能之一是重命名的模块和函数的一组标准定义,包括xrange- > range.使用six是Python文档集中包含的官方移植Python 2代码到Python 3 HOWTO的许多建议之一.


Ign*_*ams 6

您可能应该做的是确保它在2.x下干净利落地运行,然后通过它2to3并验证结果在3.x中干净地运行.这样你就不必经历诸如重新定义之类的箍,range就像你已经做过的那样.

  • 2行代码如何"跳过箍",但是经常通过`2to3`不是? (2认同)