【发布时间】:2011-09-21 22:29:53
【问题描述】:
我的一个课程要求使用 Python 完成作业,作为练习,我一直在确保我的程序可以在 Python 2 和 Python 3 中运行,使用如下脚本:
#!/bin/bash
# Run some PyUnit tests
python2 test.py
python3 test.py
我一直在做的一件事是让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
这是个坏主意吗?
编辑:
原因是 xrange 和 range 在 Python 2 和 Python 3 中的工作方式不同,我希望我的代码在两者中做同样的事情。我可以反过来做,但是让 Python 3 像 Python 2 一样工作似乎很愚蠢,因为 Python 3 是“未来”。
这里有一个例子说明为什么只使用range 不够好:
for i in range(1000000000):
do_something_with(i)
我显然没有使用列表,但在 Python 2 中,这将使用大量内存。
【问题讨论】:
-
它真的不适用于 Python 2 的范围吗?
-
我不会说这是一个坏主意,但重用名称
range会很糟糕。如果我在 Python 2.x 代码中看到range,我希望它返回一个列表而不是迭代器,并且不必搜索代码以查看名称是否已重新分配。一起使用不同的名称甚至重用xrange可能会更容易,因为它没有在 Python 3.x 中定义。 -
你在做什么与
xrange一起工作,但不是Python 2.x的range? -
@JeffMercado 将答案作为答案发布。为什么要发表评论?
-
@dkamins:我通常将我的意见保留为我可以支持的 cmets 和陈述,我会考虑做出回答。我正在考虑将其发布为答案(我的答案仍在起草中),但它主要是 AFAIK 的意见,因为我真的不知道这里最好的做法是关于 python 的预期编码标准。
标签: python python-3.x python-2.x