描述:對於函數foo,使用修飾器修飾,在執行foo函數的同時統計執行時間。這樣其他函數都可以使用此修飾器得到運行時間。
(有返回值和沒有返回值的函數要用不同的修飾器似乎)
(對於有返回值的函數,不確定用result存儲實際函數執行結果再最終返回的方法是不是恰當)
1 import time 2 3 def timeit(func): 4 5 def wrapper(word): 6 start = time.clock() 7 result = func(word) 8 end = time.clock() 9 print 'Used: ', end - start 10 return result 11 12 return wrapper 13 14 @timeit 15 def foo(word): 16 return word 17 18 19 print foo("123")
1 def transfer(func): 2 def wrapper(): 3 result = func() 4 5 result_new = {} 6 for key in result: 7 result_new[key] = result[key] 8 if type(result_new[key]) is type("H"): 9 result_new[key] = result_new[key].upper() 10 11 return result_new 12 13 return wrapper 14 15 @transfer 16 def foo(): 17 result = {} 18 result['name'] = "wang" 19 result['age'] = 1 20 21 return result 22 23 print foo()
在類里
1 class test: 2 def __init__(self): 3 pass 4 5 def transfer(func): 6 def wrapper(instance): 7 result = func(instance) 8 result_new = {} 9 for key in result: 10 result_new[key] = result[key].upper() 11 12 return result_new 13 14 return wrapper 15 16 @transfer 17 def getDict(self): 18 result = {} 19 result["name"] = "wang" 20 return result 21 22 t = test() 23 print t.getDict() 24 class test: 25 def __init__(self): 26 pass 27 28 def transfer(func): 29 def wrapper(instance): 30 result = func(instance) 31 result_new = {} 32 for key in result: 33 result_new[key] = result[key].upper() 34 35 return result_new 36 37 return wrapper 38 39 @transfer 40 def getDict(self): 41 result = {} 42 result["name"] = "wang" 43 return result 44 45 t = test() 46 print t.getDict()
參考文章: