python學習day07 高階函數 裝飾器 語法糖
阿新 • • 發佈:2018-06-05
int lee 場景 return UNC alt image style ima
語法糖對於計算機的運行並沒有任何的好處,但是對於程序員的好處是很大的,方便我們寫代碼,所以稱為糖
#******************************裝飾器************************* # 裝飾器本質上就是一個python函數,他可以讓其他函數在不需要做任何代碼變動的前提下,增加額外的功能,裝飾器的返回值也是一個函數對象。 # 裝飾器的應用場景:比如插入日誌,性能測試,事務處理,緩存等等場景 import time def func1(): print(‘in func1‘) def timer(func): def inner(): start= time.time() func() #這裏的func取得是形參,形參給的是func1,所以這裏執行的是func1() print(time.time() - start) return inner func1 = timer(func1) #func1作為參數傳遞到timer函數中,timer函數返回一個inner的返回值賦值給func1,func1()也即inner() func1() #timer這個函數是用來計算別的函數(形參為函數名)的運行時間
#********裝飾器語法糖****** import timedef timer(func): def inner(): start = time.time() func() print(time.time() - start) return inner @timer #==> func1 = timer(func1) 除了這條語句,其他的語句都一樣,而@timer 就相當於 timer(func1)語句, #這個@timer語句相當於把timer函數和與它相鄰的下一個函數以func1 = timer(func1)這樣的形式關聯起來 def func1():print(‘in func1‘) time.sleep(1) #延時1s def func2(): print(‘in func2‘) time.sleep(2) #延時2s func1() func2() # in func1 # 1.0009326934814453 輸出結果是1s多,很明顯func1函數擴展了計時功能 # in func2
import time def timer(func): def inner(): start = time.time() func() print(time.time() - start) return inner @timer #==> func1 = timer(func1) 除了這條語句,其他的語句都一樣,而@timer 就相當於 timer(func1)語句, #這個@timer語句相當於把timer函數和與它相鄰的下一個函數以func1 = timer(func1)這樣的形式關聯起來 def func2(): print(‘in func2‘) time.sleep(2) #延時2s def func1(): print(‘in func1‘) time.sleep(1) #延時1s func1() func2() # in func1 # in func2 # 2.0009799003601074 #這次因為func2和timer相鄰,所以fun2擴展了計時功能
python學習day07 高階函數 裝飾器 語法糖