可以进行这样的基准测试,对于运行“长时间”且相当恒定的函数来说,准确性已经足够好了,就像在你的例子中一样。但是有一些陷阱:对于“快速”函数(如空函数),您会遇到精度限制。对于执行时间不同的函数(例如 net i/o),您必须多次测量才能找到最小/最大/平均运行时间。除此之外,最好使用的时钟在平台上有所不同:在 Windows 上,首选 time.clock(),在 *nix 上首选 time.time()。
幸运的是,有一个模块可以处理所有这些timeit
:
>>> import time
>>> def procedure():
pass
>>> def time_this(f):
t0=time.clock()
f()
print((time.clock() - t0), "seconds process time")
>>> time_this(procedure)
1.9555558310457855e-06 seconds process time
>>> time_this(procedure)
1.9555557742023666e-06 seconds process time
>>> time_this(procedure)
1.9555557742023666e-06 seconds process time
>>> import timeit
>>> timeit.Timer(procedure).timeit()
0.09460783423588737
>>> timeit.Timer(procedure).repeat()
[0.09791419021132697, 0.09721947901198291, 0.09598943441130814]
你可能想看看它的来源。或者只是使用它;)
至于缓存:python 代码在第一次使用时会编译为字节码。默认情况下会缓存此字节码 - 但只要您不在import
函数中执行 s,这不会影响您的基准测试。