5

两者之间是否有任何显着差异:

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

4

2 回答 2

7

timeit将使用系统上可用的最佳计时功能。请参阅 上的文档timeit.default_timer

另外,timeit 关闭垃圾收集器

另外,我相信你用timeit错了。您应该按照文档中的最后一个示例传递一个字符串:

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

当然,另一个主要区别是它timeit使得为数千次迭代计时函数的执行变得微不足道(这是计时结果唯一有意义的时间)。这降低了单次运行时间比其他运行时间更长的重要性(例如,由于您的系统资源被其他程序占用)。

于 2013-02-01T16:18:07.890 回答
0

这两个模块的用途非常不同。

时间模块提供对底层系统提供的各种时间/日期功能的低级访问。

timeit 模块专门用于运行性能测试。

正如您所指出的,您可以及时使用函数进行简单的计时,但是人们在尝试进行性能测试时会陷入许多常见的陷阱。timeit 试图减轻这些影响,以便获得可以合理比较的可重复数字。

于 2013-02-01T16:35:10.260 回答