我遇到了一种(并非非常罕见)情况,我必须使用map()
或列表理解表达式.然后我想知道哪个更快.
答案为我提供了解决方案,但后来我开始自己测试.基本上,结果是一样的,但我在切换到Python 3时发现了一个我很好奇的意外行为,即:
λ iulian-pc ~ → python --version
Python 2.7.6
λ iulian-pc ~ → python3 --version
Python 3.4.3
λ iulian-pc ~ → python -mtimeit '{}'
10000000 loops, best of 3: 0.0306 usec per loop
λ iulian-pc ~ → python3 -mtimeit '{}'
10000000 loops, best of 3: 0.105 usec per loop
λ iulian-pc ~ → python -mtimeit 'dict()'
10000000 loops, best of 3: 0.103 usec per loop
λ iulian-pc ~ → python3 -mtimeit 'dict()'
10000000 loops, best of 3: 0.165 usec per loop
我曾假设Python3比Python2快,但在几篇文章(12)中发现情况并非如此.然后我想也许Python 3.5会在这样一个简单的任务中表现得更好,正如他们在README
中所说:
语言基本相同,但有很多细节,尤其是如何表达
但没有,它的表现更糟:
λ iulian-pc ~ → python3 --version
Python 3.5.0
λ iulian-pc ~ → python3 -mtimeit '{}'
10000000 loops, best of 3: 0.144 usec per loop
λ iulian-pc ~ → python3 -mtimeit 'dict()'
1000000 loops, best of 3: 0.217 usec per loop
我try 深入研究Python 3.5源代码已经dict
年了,但我对C语言的知识不足以自己找到答案(或者,我甚至可能没有在正确的地方搜索).
所以,我的问题是:
在一个相对简单的任务(比如dict
定义)上,是什么使得较新版本的Python比较旧版本的Python慢,根据常识,反之亦然?我知道,这些差异非常小,在大多数情况下都可以忽略.这只是一个让我好奇的观察,为什么时间增加了,但至少没有保持不变?