想測試一行代碼的運行時間,在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