Python timeit模块详解:timeit、repeat与Timer类用法
本文详细介绍Python标准库timeit模块的三种核心用法:timeit()函数、repeat()函数以及Timer类。重点解析各函数的参数含义,包括stmt、setup、number及repeat等关键字参数的配置方法,并通过代码示例展示如何准确测量代码片段的执行时间,帮助开发者进行高效的Python性能分析。
1. timeit.timeit(stmt='pass', setup='pass', timer=<default timer>, number=default_number)
- timeit() 函数包含四个参数,所有参数均支持关键字传参,且各自拥有默认值。
- stmt:用于传入待测试时间的代码片段。该参数可直接接收代码表达式、单个变量或函数对象。若传入函数,需在函数名后添加小括号以触发执行,例如设置为 stmt = 'func()'。
- setup:用于定义 stmt 运行所需的环境,包括所需的参数、变量或需导入的模块等,例如 setup = 'from __main__ import func'。该参数支持单行或多行语句,多行语句之间需使用分号分隔。
- 若未为 stmt 和 setup 参数赋值,则无法实现测试目的,因此这两个参数是必须提供的。
- timer:该参数指定当前操作系统的基本时间单位,默认情况下会根据运行环境的操作系统自动获取(源码中已预定义),通常保持默认设置即可。
- number:指定待测试代码的执行次数,默认值为1000000(一百万次)。对于执行耗时较长的代码,若运行次数过多将消耗大量时间,用户可根据需要自行调整运行次数。
2. timeit.repeat(stmt="pass", setup="pass", timer=default_timer, repeat=default_repeat, number=default_number)
- repeat() 函数包含五个参数,所有参数均支持关键字传参,且各自拥有默认值。其参数含义与 timeit() 函数相同。
- repeat:表示测试重复执行的次数,可理解为将具有相同参数的 timeit() 函数重复执行多次。最终结果以列表形式返回,repeat 默认值为3次。
3. class timeit.Timer(stmt='pass', setup='pass', timer=<timer function>)
- 这是一个用于计算小段代码执行速度的类,其构造函数需要接收 stmt、setup 和 timer 三个参数。
- 前两个参数的默认值均为 'pass',timer 默认会根据当前运行环境的操作系统自动获取;前两个参数均可包含多条语句,多条语句之间使用分号
;或换行符分隔。
import timeit
def t1():
li = [i for i in range(100000)]
def t2():
li = []
for i in range(100000):
li += [i]
def t3():
li = []
for i in range(100000):
li.append(i)
def t4():
li = []
list(range(100000))
def t5():
li = []
for i in range(100000):
li.extend([i])
def t6():
li = []
for i in range(100000):
li.insert(0,i)
# 方式1:timeit.timeit()
# list_t1 = timeit.timeit('t1()','from __main__ import t1',number=1)
# print("i for i in range(100000): %s" %(list_t1))
# 方式2:timeit.repeat()
# list_t2 = timeit.repeat('t2()','from __main__ import t2',repeat=1,number=1)
# print("li += i: %s" %(str(list_t2)))
# 方式3:timeit.Timer
# timer3 = timeit.Timer('t3()','from __main__ import t3')
# print("li.append(i): %s" %(timer3.timeit(number=1)))
# 直接传入字符串对象
# list_l4 = timeit.timeit('li = [i for i in range(1000)]',number=1)
# print(str(list_l4))
# 传入多个函数对象(;或空行分隔)
list_l5 = timeit.repeat('t4();t5();t6()','from __main__ import t4;from __main__ import t5;from __main__ import t6',repeat=1,number=1)
print(str(list_l5))
以上就是Python使用timeit统计运行时间模块的详细内容,更多关于Python使用timeit的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













