timeit模块 - 获得最快和最慢的循环

时间:2015-11-07 21:33:00

标签: python python-2.7 timeit

我想用Python的timeit模块做一些基准测试。有没有办法让timeit返回1000次循环中最慢和最快循环的时间?

3 个答案:

答案 0 :(得分:1)

代码非常容易破解。您应该能够复制timeit.py source code,将其保存到my_timeit.py,稍加编辑,然后将其用作新模块。

您可以在line 326上看到timeit.py best = min(r);您可以添加worst = max(r)并编辑下面的打印报表。

答案 1 :(得分:1)

使用repeat功能代替timeit,它会返回一个时间列表。

答案 2 :(得分:1)

timeit返回“3的最佳值”,即有两个参数:一个指定循环中的迭代次数,另一个指定重复循环的次数。传递给min()的结果是 per loop 的时间,而不是每次循环的迭代。

重复循环的目的是排除同一系统上其他进程的影响 - 来自文档(help('timeit')):

  

当需要精确计时时,最好的办法是重复   时间几次,并使用最佳时间。 -r选项很好   为了这;大多数情况下,3次重复的默认值可能就足够了   例。

重复测量1000次是没有意义的。您可能需要为单个循环指定1000次迭代(默认值为1000000)。

只有最快的循环(最短时间)才有用 - 来自help('timeit.Timer.repeat')

  

注意:计算平均值和标准偏差是很诱人的   结果向量并报告这些。但是,这不是很有用。在   一个典型的情况,最低值给出了你的速度的下限   机器可以运行给定的代码片段; 结果中的值越高   向量通常不是由Python的速度变化引起的,而是   通过其他过程干扰你的计时准确性。那么   结果的min()可能是你应该唯一的数字   感兴趣。之后,你应该看看整个矢量和   应用常识而不是统计。强调是我的

,即最慢的循环表示其他进程可以干扰测量的程度。

#!/usr/bin/env python
import timeit

def your_function():
    "do something"

t = timeit.Timer(your_function)
# repeat 10 times, 1000000 times through the loop
repeat, number = 10, 1000000
r = t.repeat(repeat, number) 
best, worse = min(r), max(r)
print("{number} loops, best of {repeat}: {best:.3g} seconds per loop, "
     "worse of {repeat}: {worse:.3g} seconds per loop".format(**vars()))