2022-09-18
帶有引數的裝飾器的實質:
因為裝飾器是不能在帶有引數,所以要定義帶有引數的裝飾器應該換一種思路,在裝飾器的外面套一個函式,使用該函式回傳這個裝飾器,
帶有引數的裝飾器的實體:
1 # 裝飾器 2 def return_decorator(flag): 3 def decorator(func): 4 def inner(a,b): 5 if flag == "+": 6 print("正在努力執行加法運算") 7 elif flag == "-": 8 print("正在努力執行減法運算") 9 func(a,b) 10 return inner 11 return decorator 12 13 @return_decorator("+") 14 # 原來的函式 15 def add_num(a,b): 16 result = a + b 17 print(result) 18 19 @return_decorator("-") 20 def sub_num(a,b): 21 result = a - b 22 print(result) 23 24 add_num(1,2) 25 sub_num(1,4)
說明:
第2行,定義了一個外部函式,內部放置裝飾器,這個外部函式是有引數的,第5-8行,在inner函式內部,進行判斷,如果傳入的引數“flag”為“+”,輸出xx;為“-”,輸出xx,
第9行,是func(a,b)引數,如果此處寫為了add_num(a,b)或者sub_num(a,b),會出現“堆疊記憶體溢位”的錯誤,
第11行,回傳裝飾器,
第13行,給帶引數的裝飾器傳一個flag引數“+”,第19行,傳“-”引數,
第24-25行,呼叫原來的函式,
運行結果圖:

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/508994.html
標籤:Python
上一篇:使用多個裝飾器
下一篇:類裝飾器
