我迅速尝试在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/

10-12 20:56