Python中Timeit和Time的区别

5 投票
2 回答
6674 浏览
提问于 2025-04-17 14:27

这两段代码之间有什么明显的区别吗:

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

timeittime之间的主要区别是什么呢?

2 个回答

0

这两个模块的用途完全不同。

time模块让你可以低级别地访问系统提供的各种时间和日期功能。

而timeit模块则专门用于进行性能测试。

正如你所提到的,使用time模块里的函数可以进行简单的计时,但在进行性能测试时,人们常常会遇到一些常见的陷阱。timeit模块的设计就是为了避免这些问题,从而得到可以重复的、合理可比的测试结果。

7

timeit 会使用你系统上最好的计时功能。你可以查看关于 timeit.default_timer 的文档了解更多信息。

另外,timeit关闭垃圾回收器

我觉得你可能用错了 timeit。你应该像文档最后一个 示例 中那样传递一个字符串:

print timeit("pE1test2()","from __main__ import PE1test2",number=1)

当然,timeit 还有一个主要的不同之处,就是它可以轻松地对函数执行进行数千次的计时(这才是计时结果有意义的时候)。这样就减少了单次运行比其他运行耗时更长的影响(比如因为其他程序占用了你的系统资源)。

撰写回答