python 學習彙總32:timeit-程式測試( tcy)
阿新 • • 發佈:2018-11-19
timeit-程式測試 2018/9/6
1.簡單測試程式的執行時間:
在一段程式的前後都用上time.time(),然後進行相減
2.timeit
相對timeit 細粒度,profile 和 pstats 模組提供針對更大程式碼塊的時間度量工具
選擇傳遞globals=globals(),這會導致程式碼在當前的全域性名稱空間內執行。
2.1.函式: timeit.timeit(stmt ='pass',setup ='pass',timer = <default timer> , number = 1000000,globals = None ) 用途: Timer用給定語句設定程式碼和計時器函式建立一個例項,用timeit()執行測試 全域性變數引數指定要在其中執行程式碼的名稱空間 引數: stmt: 測試程式碼。字串表示式,單個變數,函式。 setup: 這將stmt的環境傳進去。比如各種import和引數什麼的。 timer: 這個引數一般使用不到,具體使用可以參看文件。 timeit.repeat(stmt ='pass',setup ='pass',timer = <default timer>,repeat = 3, number = 1000000,globals = None ) Timer用給定語句設定程式碼和計時器函式建立一個例項,用repeat()執行重複測試 全域性變數引數指定要在其中執行程式碼的名稱空間。
timeit.default_timer()
預設定時器time.perf_counter()
2.2.class timeit.Timer(stmt ='pass',setup ='pass',timer = <timer function> , globals = None )# 小程式碼片段的定時執行速度類。 stmt和setup包含多個由";"或換行符分隔語句,不包含多行字串文字。 預設在timeit的名稱空間內執行; 可以通過傳遞一個名稱空間給全域性變數來控制。 說明: 和函式相比多了一個重複呼叫次數。 度量一條語句執行時間,用timeit()方法。 該語句和設定引數也可以採取的是不帶引數的可呼叫的物件。
timeit(number = 1000000 )
主要語句的時間編號執行。
執行一次設定語句,返回多次執行主語句所需時間float秒
autorange(callback = None )
自動確定呼叫次數timeit()
repeat(repeat = 3,number = 1000000 )
重複呼叫timeit()次數
引數1指定呼叫多少次timeit();引數2指定timeit()測試次數。
3.例項
1)測試語句1:timeit
import timeit # 例項1:timeit-測試語句 a=timeit.timeit('id=a;name=b',setup='a=1000;b="Tom"',number=1000000) print('1.1.testTime=',a) # 例項2:timeit-測試語句 s='id=a;name=b'; a=timeit.timeit(stmt=s,setup='a=1000;b="Tom"',number=1000000) print('1.2.testTime=',a) # 例項3:timeit-測試語句 s = """\ id=a name=b """ a=timeit.timeit(stmt=s,setup='a=1000;b="Tom"',number=1000000) print('1.3.testTime=',a) # 例項4:timeit.Timer-測試語句 a=timeit.Timer('id=a;name=b','a=1000;b="Tom"').timeit(number=1000000) print('1.4.testTime=',a) # 例項5:timeit.Timer-測試語句 t=timeit.Timer('id=a;name=b','a=1000;b="Tom"') a1=t.timeit(number=1000000) a2=t.repeat(repeat = 3,number = 1000000) print('1.5.testTime=',a1,a2) # 例項6:timeit-測試語句 s='L = [i for i in range(n)]';n=100 a=timeit.timeit(stmt=s,number=100000, globals=globals()) print('2.0.testTime=',a)# setup=傳遞一個包含匯入語句
2) 測試函式
# 例項1:timeit-測試函式
import timeit
def test(n):
L = [i for i in range(n)]
#if __name__ == '__main__':
a=timeit.timeit("test(100)", setup="from __main__ import test",number=100000)
print('2.1.testTime=',a) #2.1.testTime= 0.54220718
# 例項2:timeit-測試函式
import timeit
def test(n):
L = [i for i in range(n)]
n=100
a=timeit.timeit('test(n)',number=100000, globals=globals())
print('2.2.testTime=',a)#2.2.testTime= 0.536649002
# 例項3:timeit-測試多個函式
def f(x):return x**2
def g(x):return x**4
def h(x):return x**8
a=timeit.timeit('[func(42) for func in (f,g,h)]',number=100000,globals=globals())
print('2.3.testTime=',a)
#例項4:timeit.repea-測試重複次數
#repeat和timeit用法相似,多一個repeat引數(重複測試次數=3.),返回時間列表
a=timeit.repeat("test(100)", setup="from __main__ import test",number=100000,repeat=3)
print('3.1.testTime=',a,'min=',min(a))
#例項5:timeit.Timer-測試重複次數
t=timeit.Timer(stmt ='test(n)',setup ='n=100',globals = globals())
a1=t.timeit(number=100000)
a2=t.repeat(repeat = 3,number = 100000)
print('3.2.testTime=',a1,a2,'min=',min(a2))
結果輸出
1.1.testTime= 0.04432365000000005
1.2.testTime= 0.04307258300000005
1.3.testTime= 0.044008316999999963
1.4.testTime= 0.04538698299999999
1.5.testTime= 0.044759738999999965 [0.04225173900000001, 0.041612761, 0.04221409500000006]
2.0.testTime= 0.5714974949999999
2.1.testTime= 0.531626156
2.2.testTime= 0.534958423
2.3.testTime= 0.2584878100000001
3.1.testTime= [0.5270306009999999, 0.5233380219999999, 0.5257756219999998] min= < FONT> 0.5233380219999999
3.2.testTime= 0.5361430020000002 [0.5355201569999997, 0.5308390449999996, 0.5279976230000001] min= 0.5279976230000001