想测试一行代码的运行时间,在python中比较方便,能够直接使用timeit:html
>>> import timeit #执行命令 >>> t2 = timeit.Timer('x=range(1000)') #显示时间 >>> t2.timeit() 10.620039563513103 #执行命令 >>> t1 = timeit.Timer('sum(x)', 'x = (i for i in range(1000))') #显示时间 >>> t1.timeit() 0.1881566039438201
在iPython中直接使用python
In [1]: from timeit import timeit as timeit In [2]: timeit('x=1') Out[2]: 0.03820111778328037 In [3]: timeit('x=map(lambda x:x*10,range(32))') Out[3]: 8.05639690328919
timeit 模块windows
# -*- coding: utf-8 -*-
#!/bin/env pythonapp
def test1():
n=0
for i in range(101):
n+=i
return n函数
def test2():
return sum(range(101))工具
def test3():
return sum(x for x in range(101))性能
if __name__=='__main__':
from timeit import Timer
t1=Timer("test1()","from __main__ import test1")
t2=Timer("test2()","from __main__ import test2")
t3=Timer("test3()","from __main__ import test3")
print t1.timeit(10000)
print t2.timeit(10000)
print t3.timeit(10000)
print t1.repeat(3,10000)
print t2.repeat(3,10000)
print t3.repeat(3,10000)测试
结果以下命令行
3.21831489756
0.109082858296
4.83077821343
[3.2328774327463403, 3.200496361967792, 3.219513164382626]
[0.11024445844373787, 0.10911708052280389, 0.10891761383080834]
[4.817947811802895, 4.892466221265554, 5.003930946530911]htm
利用time模块
利用time模块(仅做练习之用,不推荐)。 time.localtime(), time.time(), time.clock() 对比:
# -*- coding: utf-8 -*-
#!/bin/env python
def test():
L=[]
for i in range(100):
L.append(i)
if __name__=='__main__':
from time import clock
start=clock()
for i in range(10000):
test()
finish=clock()
print (finish-start)/10000
执行结果为
0.00032365431221
其余方法
遇到复杂的程序,有不少性能分析工具可用。好比python的标准库里的profile能够统计程序里每个函数的运行时间,而且提供了多样化的报表。
大多时候,须要作的是"怎么用"!
python内置了timeit模块,经过它能够很简单的计算出代码执行时间,能够经过number参数控制代码的执行次数,很是好用。
更详细的实用方法能够参考:http://docs.python.org/2/library/timeit.html
>>> import timeit >>> timeit.timeit('"-".join(str(n) for n in range(100))', number=10000) 0.8187260627746582 >>> timeit.timeit('"-".join([str(n) for n in range(100)])', number=10000) 0.7288308143615723 >>> timeit.timeit('"-".join(map(str, range(100)))', number=10000) 0.5858950614929199