在回答另一个问题时,我建议使用timeit
测试用正整数和负整数索引列表之间的差异。以下是代码:
import timeit
t=timeit.timeit('mylist[99]',setup='mylist=list(range(100))',number=10000000)
print (t)
t=timeit.timeit('mylist[-1]',setup='mylist=list(range(100))',number=10000000)
print (t)
我使用Python 2.6运行了这段代码:
$ python2.6 test.py
0.587687015533
0.586369991302
然后我使用 Python 3.2 运行它:
$ python3.2 test.py
0.9212150573730469
1.0225799083709717
然后我挠了挠头,做了一些谷歌搜索,并决定在这里发布这些观察结果。
操作系统:OS-X(10.5.8)--Intel Core2Duo
对我来说,这似乎是一个非常显著的差异(超过1.5倍的因素)。有人知道为什么Python3如此缓慢吗?尤其是对于这样一个常见的操作?
编辑
我在我的Ubuntu Linux桌面上运行了相同的代码(Intel i7),使用Python2.6和Python 3.2获得了可比较的结果。看起来这是一个与操作系统(或处理器)有关的问题(其他用户在Linux机器上看到了相同的行为--请参见评论)。
编辑2
其中一个答案要求提供启动横幅,所以在这里:
Python 2.6.4 (r264:75821M, Oct 27 2009, 19:48:32)
[GCC 4.0.1 (Apple Inc. build 5493)] on darwin
并且:
Python 3.2 (r32:88452, Feb 20 2011, 10:19:59)
[GCC 4.0.1 (Apple Inc. build 5493)] on darwin
更新
我刚刚从http://www.python.org/download/下载并安装了最新版本的Python 2.7.3和Python 3.2.3。
在这两种情况下,我选择了
"Python x.x.3 Mac OS X 32-bit i386/PPC Installer (for Mac OS X 10.3 through 10.6 [2])"
因为我使用的是OS X 10.5。以下是新的计时结果(多次试验结果相当一致):
Python 2.7
$python2.7 test.py
0.577006101608
0.590042829514
python 3.2.3
$python3.2 test.py
0.8882801532745361
1.034242868423462
xrange()
。 - Ashwini Chaudharysetup
中,不会计时。xrange
与range
无关。 - mgilson