Python中Timeit和Time的区别
这两段代码之间有什么明显的区别吗:
from time import time
start = time()
# some process
print time() - start
和:
from timeit import timeit
def my_funct():
# some process
print timeit(my_funct, number=1)
举个例子,我会用Project Euler 1(因为这个问题非常简单易懂)
def pE1test1(): # using time()
from time import time
start = time()
print sum([n for n in range(1, 1000) if n%3==0 or n%5==0])
print time() - start
def pE1test2(): # using timeit
print sum([n for n in range(1, 1000) if n%3==0 or n%5==0])
from timeit import timeit
pE1test1()
print timeit(pE1test2, number=1)
这段代码的输出是:
>>>
233168
0.0090000629425
233168
0.00513921300363
那timeit
和time
之间的主要区别是什么呢?
2 个回答
0
这两个模块的用途完全不同。
time模块让你可以低级别地访问系统提供的各种时间和日期功能。
而timeit模块则专门用于进行性能测试。
正如你所提到的,使用time模块里的函数可以进行简单的计时,但在进行性能测试时,人们常常会遇到一些常见的陷阱。timeit模块的设计就是为了避免这些问题,从而得到可以重复的、合理可比的测试结果。
7
timeit
会使用你系统上最好的计时功能。你可以查看关于 timeit.default_timer
的文档了解更多信息。
另外,timeit
会 关闭垃圾回收器。
我觉得你可能用错了 timeit
。你应该像文档最后一个 示例 中那样传递一个字符串:
print timeit("pE1test2()","from __main__ import PE1test2",number=1)
当然,timeit
还有一个主要的不同之处,就是它可以轻松地对函数执行进行数千次的计时(这才是计时结果有意义的时候)。这样就减少了单次运行比其他运行耗时更长的影响(比如因为其他程序占用了你的系统资源)。