,,Python timeit模块原理及使用方法

,,Python timeit模块原理及使用方法

本文主要介绍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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: