使用timeit模块对函数计时
timeit模块优于time.time()的地方在于他可以测量多次执行代码的时间
class timeit.Timer(stmt=‘pass’, setup=‘pass’, timer=)
Timer是测量小段代码执行速度的类。
stmt参数是要测试的代码语句(statment);
setup参数是运行代码时需要的设置;
timer参数是一个定时器函数,与平台有关
def test1():
l = []
for i in range(1000):
l = l + [i]
def test2():
l = []
for i in range(1000):
l.append(i)
def test3():
l = [i for i in range (1000)]
def test4():
l = list(range(1000))
from timeit import Timer
t1 = Timer("test1()","from __main__ import test1")
print("concat %f seconds\n" % t1.timeit(number = 1000))
t2 = Timer("test2()","from __main__ import test2")
print("append %f seconds\n" % t2.timeit(number = 1000))
t3 = Timer("test3()","from __main__ import test3")
print("comprehension %f seconds\n" % t3.timeit(number = 1000))
t4 = Timer("test4()","from __main__ import test4")
print("list range %f seconds\n" % t4.timeit(number = 1000))
注意:Timer(“test1()”,“from main import test1”) 这里的__main__是两个下划线
运行结果:
concat 1.269903 seconds
append 0.084794 seconds
comprehension 0.038075 seconds
list range 0.018816 seconds 运行时间最短效果最好
其中,l.append(i)不能写成l = l.append(i),因为append会修改l本身,并返回None。所以当把返回值赋给l时,会出现NoneType的错误,如下:
AttributeError: ‘NoneType’ object has no attribute ‘append’
pop() ------------ O(1)
pop(i) ------------ O(n)