timeit模块
timeit模块可以用来测试一小段Python代码的执行速度。
class timeit.Timer(stmt='pass', setup='pass', timer=<timer function>)
timeit模块可以用来测试一小段Python代码的执行速度。
class timeit.Timer(stmt=‘pass’, setup=‘pass’, timer=)
- Timer是测量小段代码执行速度的类。
- stmt参数是要测试的代码语句(statment);
- setup参数是运行代码时需要的设置;
- timer参数是一个定时器函数,与平台有关。
- timeit.Timer.timeit(number=1000000)
- Timer类中测试语句执行速度的对象方法。number参数是测试代码时的测试次数,默认为1000000次。方法返回执行代码的平均耗时,一个float类型的秒数
list的操作测试
from timeit import 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))
def test5():
l = []
for i in range(1000):
l.extend([i])
def test6():
l = []
for i in range(1000):
l +=[i]
t1 = Timer("test1()", "from __main__ import test1")
print("+ ",t1.timeit(number=1000), "seconds")
t2 = Timer("test2()", "from __main__ import test2")
print("append ",t2.timeit(number=1000), "seconds")
t3 = Timer("test3()", "from __main__ import test3")
print("comprehension ",t3.timeit(number=1000), "seconds")
t4 = Timer("test4()", "from __main__ import test4")
print("list range ",t4.timeit(number=1000), "seconds")
t5 = Timer("test5()", "from __main__ import test5")
print("extend ",t4.timeit(number=1000), "seconds")
t6 = Timer("test6()", "from __main__ import test5")
print("+=",t4.timeit(number=1000), "seconds")
运行结果
+ 1.0714773000000002 seconds
append 0.08946949999999987 seconds
comprehension 0.0337966999999999 seconds
list range 0.014389599999999891 seconds
extend 0.1453298999999999 seconds
+= 0.10783919999999991 seconds
综上可得:
由此可见在list的操作测试中 + 的运行时间最长,在程序中最少运用 a=a+b 号运行,最好的替代是a+=b;
extende ;+= 所需的时间 基本一致。 那是因为+=的魔法方法 调用了extende
头部插入时间和尾部插入时间比较
-------尾插
def test7():
l = []
for i in range(1000):
l.append(i)
----尾插
def test8():
l = []
for i in range(1000):
l.insert(0,1)
t7 = Timer("test7()", "from __main__ import test7")
print("l.append(i)", t7.timeit(number=1000), "seconds")
t8 = Timer("test8()", "from __main__ import test8")
print("l.insert(0,1)", t8.timeit(number=1000), "seconds")
结果
l.append(i) 0.08424350000000014 seconds
l.insert(0,1) 0.3337367 seconds
明显得出 尾部比头部所需的时间要短。。