我迅速尝试在ipython中为2个函数计时,m1()
和m2()
用2种不同的实现方式执行相同的任务。
In [23]: %timeit for x in range(100): m1(a)
10000 loops, best of 3: 57.6 us per loop
In [24]: %timeit for x in range(100): m2(a)
10000 loops, best of 3: 108 us per loop
结果:第一个实现几乎快了2倍。到目前为止,一切都很好。
出于好奇,我更改了上面的
for
循环的范围,现在我不知所措了。In [25]: %timeit for x in range(1): m2(a)
1000000 loops, best of 3: 1.29 us per loop
In [26]: %timeit for x in range(10): m2(a)
100000 loops, best of 3: 10.8 us per loop
In [27]: %timeit for x in range(1000): m2(a)
1000 loops, best of 3: 1.06 ms per loop
for循环在这里到底在做什么?又为什么在增加范围值时循环数的值会减少?
PS:我使用this作为参考。另外,如果标题不能准确传达我的问题,请对其进行更好的编辑。
最佳答案
timeit
计算整个块的执行时间。
因此,您看到的是:
运行m2(a)
1次需要1.29 us
运行m2(a)
10次需要10.8 us
运行m2(a)
1000次需要1.06 ms
这很有意义,因为1.06ms = 1060 us
大约是基准的1000倍(而10.8 us大约是基准的10倍)
至于循环数,timeit旨在在合理的时间内运行:
$ python -mtimeit -h
...
If -n is not given, a suitable number of loops is calculated by trying
successive powers of 10 until the total time is at least 0.2 seconds.
关于python - 在ipython中使用timeit的问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19473800/