本文主要介绍Python timeit模块的原理和用法,通过示例代码详细介绍。对大家的学习或者工作都有一定的参考价值,有需要的朋友可以参考一下。
Python中的timeit模块可以用来测试一段代码的执行时间,比如变量赋值语句的执行时间,函数的运行时间等。
Timeit模块是Python标准库中的一个模块,可以直接导入使用,无需安装。导入时直接导入timeit。您可以使用timeit()函数、repeat()函数和Timer类。使用从timeit导入时.只能导入Timer类(受全局变量__all__限制)。
IT模块的源代码总共只有300多行,主要实现以上两个功能和一个类。你可以自己看看。
接下来,我开始使用timeit模块测试代码执行时间。我用timeit模块对比了Python list头部和尾部添加数据的执行时间(测试什么看需求)。
一、使用 timeit() 函数测试运行时间
1.准备测试函数
先写两个函数,一个是从列表头添加数据,一个是从列表尾添加数据。
#
编码=utf - 8
def插入时间测试():
insert_list=list()
对于范围(10)内的I:
insert_list.insert(0,I)
def附加时间测试():
append_list=list()
对于范围(10)内的I:
追加列表.追加(I)
if __name__=='__main__ ':
导入时间
#编码=utf - 8
def插入时间测试():
insert_list=list()
对于范围(10)内的I:
insert_list.insert(0,I)
def附加时间测试():
append_list=list()
对于范围(10)内的I:
追加列表.追加(I)
if __name__=='__main__ ':
导入时间
2.timeit (stmt=' pass ',setup=' pass ',timer=default _ timer,number=default _ number)函数介绍
time()函数有四个参数,每个参数都是一个关键字参数,并且有一个默认值。
Stmt:传入需要测试时间的代码。可以直接传入代码表达式或单个变量,也可以传入函数。传入函数时,应该在函数名后面加上括号,让函数执行,比如stmt='func()'。
设置:stmt的运行环境,比如stmt使用的参数和变量,要导入的模块等。如setup=' from _ _ main _ _ import func '(_ _ main _ _表示当前文件)。您可以编写单行语句或多行语句,用分号分隔。
stmt参数和setup参数的默认值都是pass。如果没有传值,就失去了测试的意义,所以这两个参数是必须的。
Timer: timer参数是当前操作系统的基本时间单位。默认会根据当前运行环境的操作系统自动获取(已经在源代码中定义了),也可以保留默认。
Number:要测试的代码运行的次数,默认为1,000,000(一百万)次。对于耗时的代码,运行次数过多会耗费大量时间,可以自行修改次数。
3.测试函数的运行时间
现在用timeit()来测试上面两个函数的运行时间。
insert _ time _ time it=time it . time it(stmt=' insert _ time _ test()',
setup=' from _ _ main _ _ import insert _ time _ test ')
print('insert_time_timeit:',insert_time_timeit)
append _ time _ time it=time it . time it(stmt=' append _ time _ test()',
setup=' from _ _ main _ _ import append _ time _ test ')
print('append_time_timeit:',append_time_timeit)
运行结果:
('插入时间时间: ',2.9112871)
(' append_time_timeit:',1.88841249999999998)
如您所见,在列表的开头添加数据比在列表的结尾添加数据花费的时间更长。
4.测试代码(表达式)的运行时间
继续使用timeit()测试上述代码的运行时间,只是这次您将代码直接传递给参数,而不是函数。
insert _ time _ time it=time it . time it(stmt=' list(insert _ list . insert(0,i) for i in init_list)',
setup=' insert _ list=list();init_list=range(10)',
数量=100000)
print('insert_time_timeit:',insert_time_timeit)
append _ time _ time it=time it . time it(stmt=' list(append _ list . append(I)for I in init _ list)',
setup=' append _ list=list();init_list=range(10)',
数量=100000)
print('append_time_timeit:',append_time_timeit)
由于时间久远,该数字在代码中由一百万次改为十万次。运行结果如下:
('插入_时间_时间: ',50000000001)
(' append_time_timeit:',0.21436310000001413)
相对来说,对于同一个操作,使用函数的运行时间比直接传入代码表达式的时间要少得多,尤其是在头中插入数据的时候。
二、使用 repeat() 函数测试运行时间
1.重复(stmt=' pass ',setup=' pass ',timer=default _ timer,repeat=default _ repeat,number=default _ number)功能介绍
repeat()函数有五个参数,每个参数都是一个关键字参数,并且有一个默认值。与timeit()函数相比,timeit()函数拥有所有参数,repeat()函数多了一个repeat参数。
Repeat:表示测试要重复几次,可以理解为用相同的参数重复执行timeit()函数。最终结果以列表形式返回,默认重复3次。
2.测试函数的运行时间
现在用repeat()来测试上面两个函数的运行时间。
insert _ time _ repeat=time it . repeat(stmt=' insert _ time _ test()',
setup=' from _ _ main _ _ import insert _ time _ test ')
打印('插入时间重复: ',插入时间重复)
append _ time _ repeat=time it . repeat(stmt=' append _ time _ test()',
setup=' from _ _ main _ _ import append _ time _ test ')
打印('追加时间重复: ',追加时间重复)
运行结果如下:
('插入_时间_重复: ',[2.7707739,2.90885,2.9088999987
(' append_time_repeat:',[1.7458063,1.77736800000001,1.84759999
3.测试代码(表达式)的运行时间
继续用repeat()测试上面代码的运行时间,直接传入代码。次数改为10万次后,时间还很长(300多秒),所以继续减少次数到1万次。
insert _ time _ repeat=time it . repeat(stmt=' list(insert _ list . insert(0,i) for i in init_list)',
setup=' insert _ list=list();init_list=range(10)',
重复=5,
数量=10000)
打印('插入时间重复: ',插入时间重复)
append _ time _ repeat=time it . repeat(stmt=' list(append _ list . append(I)for I in init _ list)',
setup=' append _ list=list();init_list=range(10)',
重复=5,
数量=10000)
打印('追加时间重复: ',追加时间重复)
运行结果如下:
(' insert_time_repeat:',[2.591015,2.5814999699999997,2.5547322,2.6153070000000005,2.54400000006])
(' append_time_repeat:',[0.01816929999999985,0.01746889999999901,0.018901899999999472,0.0187374000000000903,0.018219000000725])。
三、使用 Timer 类测试运行时间
1.定时器类介绍
上面使用了timeit()函数和repeat()函数。实际上,在timeit模块中,这两个函数进一步封装了Timer类,实际上调用了Timer类中的方法。
在Timer类中,实现了两个方法,timeit()方法和repeat()方法。这两个方法由上述两个函数调用。
使用从timeit导入时.只能导入Timer类,所以可以直接使用Timer类进行测试,也可以自己调用方法,使用起来更加灵活。
2.添加测试列表标题
首先,实例化一个timer类的对象。实例化时,传入stmt和setup参数(参数含义同上)。定时器参数保持默认值。然后通过实例对象调用对应的timeit()方法或repeat()方法,在timeit()方法中传入number,在number和repeat()方法中传入。
使用timeit()方法和repeat()方法测试从标头添加数据的运行时间。
timer_insert=timeit。计时器(stmt='insert_time_test()',setup=' from _ _ main _ _ import insert _ time _ test ')
insert _ time _ time it=timer _ insert . time it(数字=1000000)
print('insert_time_timeit:',insert_time_timeit)
插入时间重复=计时器插入重复(数字=1000000)
打印('插入时间重复: ',插入时间重复)
运行结果如下:
('插入时间时间: ',2.7732486)
(' insert_time_repeat:',[2.7367806999999997,2.70740260000001,2.736786
3.在测试列表的末尾添加
使用timeit()方法和repeat()方法测试从尾部添加数据的运行时间。
timer _ append=timeit计时器(stmt='append_time_test()',setup=' from _ _ main _ _ import append _ time _ test ')
附加时间it=计时器附加。计时(数字=1000000)
print('append_time_timeit:',append_time_timeit)
追加时间重复=计时器追加。重复(数字=1000000)
打印('追加时间重复: ',追加时间重复)
运行结果如下:
(' append_time_timeit:',1.99661060000001)
(' append_time_repeat:',[1.95233439999999998,1.3379999999998,1.8670000004])
时间模块是一个比较简单的模块,大概用法就这些了。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。