1. 程式人生 > >python學習day07 高階函數 裝飾器 語法糖

python學習day07 高階函數 裝飾器 語法糖

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 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 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 高階函數 裝飾器 語法糖