使用该timeit
模块进行适当的计时。它避免了常见的陷阱,为您的平台使用最精确的计时器实现,并通过多次重复测试代码来尽量减少操作系统调度的影响。
另一方面,使用分析器会增加很多开销来支持检测完整的调用堆栈;timeit
测量完整的执行时间,而不是堆栈中的单个调用。
使用timeit
显示这两个版本太接近而无法调用(默认为 100 万次迭代):
>>> timeit.timeit('a += x', 'a = x = 1')
0.047940969467163086
>>> timeit.timeit('a = a + x', 'a = x = 1')
0.04770612716674805
两个操作都是一个字节码:
>>> def f(): a += x
...
>>> def g(): a = a + x
...
>>> import dis
>>> dis.dis(f)
1 0 LOAD_FAST 0 (a)
3 LOAD_GLOBAL 0 (x)
6 INPLACE_ADD
7 STORE_FAST 0 (a)
10 LOAD_CONST 0 (None)
13 RETURN_VALUE
>>> dis.dis(g)
1 0 LOAD_FAST 0 (a)
3 LOAD_GLOBAL 0 (x)
6 BINARY_ADD
7 STORE_FAST 0 (a)
10 LOAD_CONST 0 (None)
13 RETURN_VALUE