起因:为什么是模块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=3, number=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时间。测量自然/真实/时钟时间,也就是通常的类似掐表计时。