我的一個班的作業需要在Python完成,並作爲練習,我已經確保我的計劃在這兩個Python 2和Python 3中工作,使用這樣的腳本:將Python 3的「範圍」「反向移植」到Python 2是一個壞主意嗎?
#!/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
和在Python 2和Python 3 range
工作方式不同,我希望我的代碼做同樣的事情在這兩個。我可以用相反的方法做到這一點,但是讓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'? –