timeit 模块: 测试时间性能

来源:互联网 发布:word2016 mac破解版 编辑:程序博客网 时间:2024/05/16 18:28

 

起因:为什么是模块timeit ,而不用time模块/timing模块?

模块timeit (而不用time模块/timing模块)

time.clock() 精度高,还是使用 time.time() 精度更高,要视乎所在的平台来决定。总概来讲,在 Unix 系统中,建议使用 time.time(),在 Windows 系统中,建议使用 time.clock()。

python提供timeit.default_timer()默认基于平台选择精度高的记录时间的方法。


两个最重要的计时方法:

1. timeit

timeit.timeit(stmt='pass'setup='pass'timer=<default timer>number=1000000)

2. repeat

timeit.repeat(stmt='pass'setup='pass'timer=<default timer>repeat=3number=1000000)

stmt='pass':要测试时间的语句, 比如“"test()”

setup='pass':测试语句需要的前提环境:“from __main__ import test”

 timer=<default timer>:选择时间计时器,默认是timeit.default_timer();

 repeat=3:需要timieit的次数;

number=1000000:测试语句需要循环的次数(算timieit一次);

 

示例:

官方样例:

>>> importtimeit

>>> timeit.timeit('"-".join(str(n) for n in range(100))', number=10000)

0.8187260627746582

>>> timeit.timeit('"-".join([str(n) for n in range(100)])', number=10000)

0.7288308143615723

>>> timeit.timeit('"-".join(map(str, range(100)))', number=10000)

0.5858950614929199

 自己尝试:1+...+100的程序,

执行程序

输出结果

timeit.timeit("sum(range(1,100001))", number=1000)

3.5515526547816165

timeit.repeat("sum(range(1,100001))", repeat=5, number=1000)

[3.55720355964975, 3.5583667799910472, 3.7193515877468855, 3.710453440883967, 3.720163398245589]

 

 备注:

注释1:模块timeit提供的方法,官方也提供同名类timeit以及方法。

官方网址:https://docs.python.org/2/library/timeit.html

注释2:timeit.default_timer()是自然时间,不是CPU时间。测量CPU时间,比较精准,通过比较程序运行前后的CPU时间差,得出程序运行的CPU时间。测量自然/真实/时钟时间,也就是通常的类似掐表计时。

0 0