timeit模块主要是用来测试某一段代码执行总共用了多长时间。
其实用time模块也可以做到,但是当我们需要进行深度优化,而且当前这段代码执行很快又看不出差异的时候,那么timeit模块就闪亮登场了
import timeit time1 = timeit.Timer(stmt="print(123)") # Timer里面主要用到三个参数,stmt,setup,timer # stmt参数是要测试的代码语句 # setup参数是运行代码是需要的设置 # timer参数是一个定时器参数,与平台有关 # 再调用time1下的timeit方法,接受一个int,代表执行多少次,默认为一百万次,让后返回执行所用的时间 t1 = time1.timeit(number=10000) # 默认一百万,这里我们指定一万 print("用时:",t1) # 程序运行结果 ''' 打印一万次123之后, 用时:0.06142749650236608 '''
import timeit # 也可以使用函数 # 先定义一个装有十万数据的列表 li = range(100000) # 计算列表内所有元素的和 # 方法一 def test1(): s = 0 for i in li: s += i return "method one,s=%s"%s # 方法二 def test2(): return "method one,s=%s"%sum(li) if __name__ == '__main__': # stmt是要执行的函数,setup是执行函数需要满足的条件。 # 就像我们使用time模块下的函数时,要导入time模块,这里要从当前模块下导入test1 time1 = timeit.Timer(stmt="test1()",setup="from __main__ import test1") time2 = timeit.Timer(stmt="test2()",setup="from __main__ import test2") t1 = time1.timeit(10000) # 默认为一百万 t2 = time2.timeit(10000) print("test1 costs time:",round(t1,4)) print("test2 costs time:",round(t2,4)) # 程序运行结果 ''' test1 costs time: 41.7879 test2 costs time: 15.284 '''
import timeit # timeit.Timer()下除了timeit之外,还有一个repeat方法。 # 用来循环测试多少次,把每一次测算的结果按照次数的顺序添加到列表中 li = range(1000) # 为了快速计算,只放入一千个数据来进行测试 # 方法一 def test1(): s = 0 for i in li: s += i return "method one,s=%s"%s # 方法二 def test2(): return "method one,s=%s"%sum(li) if __name__ == '__main__': time1 = timeit.Timer("test1()","from __main__ import test1") time2 = timeit.Timer("test2()","from __main__ import test2") # 调用repeat方法,接受两个参数,第一个参数代表循环测试的次数,第二个参数代表每进行一次测试就要对函数重复测试多少次 # 举个栗子 t1 = time1.repeat(repeat=3,number=100000) t2 = time1.repeat(repeat=3,number=100000) print("method one costs time:",t1) print("method two costs time:",t2) # 程序运行结果 ''' method one costs time: [5.003065601564169, 4.9893358248161706, 5.038256834418386] method two costs time: [5.0313725414728605, 5.07020445682916, 5.065527153249928] ''' # 可以看出repeat只比timeit多了一个参数,那就是测试的次数 # 相当于进行了三次timeit,然后每个timeit的结果放在了列表里