1.1 裝飾器
裝飾器的作用:在不改變原函式的情況下給函式增加功能
裝飾器由閉包和語法糖組成
1.2 閉包
閉包特點:
外部函式巢狀內部函式
內部函式可以訪問並且儲存外部函式的變數
外部函式返回內部函式的引用
有以上三個特點的函式就稱為閉包
閉包的例子:
def func1(a):
def func2(b):
return a+b
return func2
f1 = func1(100)
f2 = func1(50)
print(f1(1))
print(f1(1))
閉包似優化了變數,原來需要類物件完成的工作,閉包也可以完成
由於閉包引用了外部函式的區域性變數,則外部函式的區域性變數沒有及時釋放,消耗記憶體
1.3 裝飾器案例
def checkaccess(sg):
def check():
name = input("輸入使用者名稱")
if name == "zzy":
sg()
else:
print("無權檢視")
return check
@checkaccess
def selectgoods():
print("開始查詢商品")
selectgoods()
1.4 語法糖的執行邏輯
當直譯器解釋到語法糖時,將被裝飾的函式selectgoods作為引數傳遞給checkaccess方法,此時sg = selectgoods,返回check方法的引用
1.5 裝飾器使用的場景
引入日誌
函式執行時間統計
執行函式前預備處理
函式執行後清理功能
許可權校驗等場景
快取
python高階裝飾器 Python裝飾器高階
對帶引數的函式進行裝飾 對帶引數的函式進行裝飾,內嵌包裝函式的形參和返回值與原函式相同,裝飾函式返回內嵌包裝函式物件 def deco func def deco a,b print before myfunc called.ret func a,b print after myfunc calle...
python高階 裝飾器
1.1 裝飾器 裝飾器的作用 在不改變原函式的情況下給函式增加功能 裝飾器由閉包和語法糖組成 1.2 閉包 閉包特點 外部函式巢狀內部函式 內部函式可以訪問並且儲存外部函式的變數 外部函式返回內部函式的引用 有以上三個特點的函式就稱為閉包 閉包的例子 def func1 a def func2 b ...
python高階 裝飾器
1.閉包 簡單理解 閉包就是多層函式的巢狀,外層函式的返回值是內層函式的引用。def out func n num 100 def in fucn args,kwargs nonlocal num if n 2 0 裡面沒有修改num的值,直接使用可以,如果變成 num n 則會報錯,因此需要使用前...