Python3timeit的⽤法
Python3中的timeit模块可以⽤来测试⼩段代码的运⾏时间
其中主要通过两个函数来实现:timeit和repeat,代码如下:
def timeit(stmt="pass", tup="pass", timer=default_timer,
number=default_number, globals=None):
"""Convenience function to create Timer object and call timeit method."""
return Timer(stmt, tup, timer, globals).timeit(number)
def repeat(stmt="pass", tup="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, tup, timer, globals).repeat(repeat, number)
在上⾯的代码中可见,⽆论是timeit还是repeat都是先⽣成Timer对象,然后调⽤了Timer对象的timeit或repeat函数。
在使⽤timeit模块时,可以直接使⽤timeit.timeit()、peat(),还可以先⽤timeit.Timer()来⽣成⼀个Timer对象,然后再⽤TImer对象⽤timeit()和repeat()函数,后者再灵活⼀些。
上述两个函数的⼊参:
stmt:⽤于传⼊要测试时间的代码,可以直接接受字符串的表达式,也可以接受单个变量,也可以接受函数。传⼊函数时要把函数申明在当前⽂件中,然后在 stmt = ‘func()’ 执⾏函数,然后使⽤ tup = ‘from __main__ import func’
tup:传⼊stmt的运⾏环境,⽐如stmt中使⽤到的参数、变量,要导⼊的模块等。可以写⼀⾏语句,也可以写多⾏语句,写多⾏语句时要⽤分号;隔开语句。
number:要测试的代码的运⾏次数,默认100000次,对于耗时的代码,运⾏太多次会⽐较慢,此时建议⾃⼰修改⼀下运⾏次数
repeat:指测试要重复⼏次,每次的结果构成列表返回,默认3次。
⼀、直接使⽤timeit.timeit()、peat():
import timeit
print(timeit.timeit(stmt= 'list(i**2 for i in normal_list)',tup = 'normal_list=range(10000)',number=10))
#0.3437936799875755
peat(stmt= 'list(i**2 for i in normal_list)', tup='normal_list=range(10000)',repeat=2,number=10))
#[0.33649995761778984, 0.3394490767789293]
发髻的读音#tup 为复合语句
print(timeit.timeit(stmt= 'list(i**2 for i in normal_list)',tup = 'a=10000;normal_list=range(a)',number=10))
#0.33272367424748817
peat(stmt= 'list(i**2 for i in normal_list)', tup='a=10000;normal_list=range(a)',repeat=2,number=10))
#[0.3323106610316342, 0.3356380911962764]
def func():
normal_list=range(10000)
L = [i**2 for i in normal_list]
#stmt为函数
print(timeit.timeit("func()", tup="from __main__ import func",number=10))新加坡艺术学院
#0.12436874684622312
peat("func()", tup="from __main__ import func",repeat=2,number=10))
#[0.12142133435126468, 0.12079555675148601]
直接⽤函数的⽅式,速度更快。念念有词意思
⼆、先⽣成Timer,再调⽤timeit()、repeat():
import timeit
#⽣成timer
timer1 = timeit.Timer(stmt= 'list(i**2 for i in normal_list)',tup = 'normal_list=range(10000)')
#调⽤timeit和repeat时还传number和repeat参数
数学读本读后感print(timer1.timeit(number=10))
#0.34721554568091145
抶而仆之peat(repeat=2,number=10))
#[0.3391925079630199, 0.34103400077255097]
黑木耳的功效与作用#tup 为复合语句
timer1 = timeit.Timer(stmt= 'list(i**2 for i in normal_list)',tup = 'a=10000;normal_list=range(a)')
print(timer1.timeit(number=10))
0.34383463997592467
peat(repeat=2,number=10))
#[0.34573984832288773, 0.34413273766891006]
#stmt为函数
def func():
怎么取消来电转接normal_list=range(10000)
L = [i**2 for i in normal_list]
timer1 = timeit.Timer("func()", tup="from __main__ import func") print(timer1.timeit(number=10))
#0.1223264363160359
peat(repeat=2,number=10))
#[0.12266321844246209, 0.1264150395975001]