在回答另一个question https://stackoverflow.com/q/11400163/748858,我建议使用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 慢得多——尤其是对于这样一个常见的操作?
EDIT
我在 Ubuntu Linux 桌面 (Intel i7) 上运行了相同的代码,并使用 python2.6 和 python 3.2 获得了相当的结果。看来这是一个与操作系统(或处理器)相关的问题(其他用户在 Linux 机器上看到相同的行为 - 请参阅评论)。
EDIT 2
答案之一要求启动横幅,所以这里是:
Python 2.6.4 (r264:75821M, Oct 27 2009, 19:48:32)
[GCC 4.0.1 (Apple Inc. build 5493)] on darwin
and:
Python 3.2 (r32:88452, Feb 20 2011, 10:19:59)
[GCC 4.0.1 (Apple Inc. build 5493)] on darwin
UPDATE
我刚刚安装了新版本的 python2.7.3 和 python3.2.3http://www.python.org/download/ http://www.python.org/download/
在这两种情况下,我都采取了
“Python x.x.3 Mac OS X 32 位 i386/PPC 安装程序(适用于 Mac OS X 10.3 到 10.6 [2])”
因为我使用的是 OS X 10.5。以下是新的时间安排(通过多次试验,这些时间安排相当一致):
蟒蛇2.7
$python2.7 test.py
0.577006101608
0.590042829514
蟒蛇3.2.3
$python3.2 test.py
0.8882801532745361
1.034242868423462