2022-09-18 帶有參數的裝飾器的實質: 因為裝飾器是不能在帶有參數,所以要定義帶有參數的裝飾器應該換一種思路。在裝飾器的外面套一個函數,使用該函數返回這個裝飾器。 帶有參數的裝飾器的實例: 1 # 裝飾器 2 def return_decorator(flag): 3 def decorat ...
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行,調用原來的函數。
運行結果圖: