1. 简介
27.5. timeit — Measure execution time of small code snippets
Source code: Lib/timeit.py
timeit模块可以用来测试一段代码的执行耗时,如一个变量赋值语句的执行时间,一个函数的运行时间。
timeit是标准模块,无需安装。
import timeit
1.1. python interface
模块定义了三个方法和一个公共类。
1.1.1. timeit.timeit(stmt='pass', setup='pass', timer=, number=1000000, globals=None)
Create a Timer instance with the given statement, setup code and timer function and run its timeit() method with number executions. The optional globals argument specifies a namespace in which to execute the code.
参数说明:
- stmt:测试代码,一般用函数(可以用字符串表达式)。
- setup:传入stmt的运行环境,如参数,变量,模块。
- timer:
- number:执行次数,默认1000000
- globals:
1.1.2. timeit.repeat(stmt='pass', setup='pass', timer=, repeat=3, number=1000000, globals=None)
Create a Timer instance with the given statement, setup code and timer function and run its repeat() method with the given repeat count and number executions. The optional globals argument specifies a namespace in which to execute the code.
参数说明:
- repeat:重复次数,每次的结果构成列表返回,默认3次。
1.1.3. timeit.default_timer()
The default timer, which is always time.perf_counter().
Changed in version 3.3: time.perf_counter() is now the default timer.
1.1.4. class timeit.Timer(stmt='pass', setup='pass', timer=, globals=None)
Class for timing execution speed of small code snippets.
2. 案例
2.1. timeit() /repeat()
注意事项:
- 方法应在setup参数中导入;
- 变量需在setup参数中导入,且变量应为全局变量或直接传入;
- 测试次数number默认为10**6,注意修改,特别是单次执行时间较长时。
import timeit def _test_timeit():
global a # timeit
a = [1,2,3,4]
t = timeit.timeit(stmt='_test_2(a)',
setup='from __main__ import _test_2, a',
number=100000)
print(t) # repeat
a = [1,2,3,4]
t = timeit.repeat(stmt='_test_2(a)',
setup='from __main__ import _test_2, a',
number=1000000,
repeat=5 )
print(t) def _test_2(s=None, *ar):
#s.insert(0, 45)
s.append(55) if __name__ == '__main__':
a = None
_test_timeit()
pass
输出:
0.02622983706364665
[0.28630844773090425, 0.2964419925588122, 0.23573263042489412, 0.2578145301438086, 0.22425034115163478]
说明:
repeat()与timeit()的区别在于它会重复测试多次,返回单次执行时间所组成的列表。
2.2. timer()
timer()实质是timeit()和repeat()的底层实现;
def timeit(stmt="pass", setup="pass", timer=default_timer,
number=default_number, globals=None):
"""Convenience function to create Timer object and call timeit method."""
return Timer(stmt, setup, timer, globals).timeit(number) def repeat(stmt="pass", setup="pass", timer=default_timer,
repeat=default_repeat, number=default_number, globals=None):
"""Convenience function to create Timer object and call repeat method."""
return Timer(stmt, setup, timer, globals).repeat(repeat, number)
也可以使用Timer()初始化然后调用其方法timeit和repeat。