Python:閉包與裝飾器
阿新 • • 發佈:2019-02-03
閉包:
在函式內部再定義一個函式,並且內部這個函式用到了外邊函式的變數,那麼將內部函式以及用到的一些變數稱之為閉包。
# 兩個函式巢狀,外層函式返回內層函式的引用, 外層函式必須傳引數-->外層函式不傳參相當於只定義內層函式,沒有什麼用。
注意點:
由於閉包引用了外部函式的區域性變數,則外部函式的區域性變數沒有及時釋放,消耗記憶體。
裝飾器:
上例 @w1內部會執行一下操作: @函式名 是python的一種語法糖。
執行w1函式 ,並將 @w1 下面的函式作為w1函式的引數,即:@w1 等價於 w1(f1) 所以,內部就會去執行:
def w1(func): def inner(): # 驗證1 # 驗證2 # 驗證3 func() return inner @w1 def f1(): print('f1')
w1的返回值
將執行完的w1函式返回值 賦值 給@w1下面的函式的函式名f1 即將w1的返回值再重新賦值給 f1,即:
新f1 = def inner(): #驗證 1 #驗證 2 #驗證 3 原來f1() return inner
所以,以後業務部門想要執行 f1 函式時,就會執行 新f1 函式,在新f1 函式內部先執行驗證,再執行原來的f1函式,然後將原來f1 函式的返回值返回給了業務呼叫者
如此一來, 即執行了驗證的功能,又執行了原來f1函式的內容,並將原f1函式返回值 返回給業務呼叫著
程式碼執行順序:第1行(指向了2-5行)--> 第7 行-->第6行-->第5行--> 第11行-->3-->4-->8