Python影片教學講解裝飾器
推薦免費:Python影片教學
裝飾概念
#裝飾器,說穿了,就是用來裝飾函數的一個函數。
裝飾器遵循開放封閉原則
、依賴倒置原則
,這兩個原則概念,自行百度下,
裝飾長啥樣
def wrapper(f): def inner(*args,**kwargs): ret = f(*args,**kwargs) return ret return inner
上述程式碼是裝飾器的固定格式
呼叫裝飾器
@wrapper # 简称语法糖 def test(): print(1) test()
@wrapper
是呼叫裝飾器,相較於wrapper(test())
,更節省程式碼,更美觀。可能你看到這裡就不懂了,為啥要@wrapper
?呼叫函數不是wrapper()
?
其實吧,你要我說,我也不知道,我就知道,這樣寫比較簡單。直接在要裝飾的函數前@wrapper
即可
以一個小例子快速看懂裝飾器
def wrapper(f): print(2) def inner(*args,**kwargs): print(3) ret = f(*args,**kwargs) print(4) return ret return inner @wrapper def test(): print(1) test()
@wrapper
== wrapper(test())
相當於呼叫裝飾函數,直接用語法糖@wrapper
會比較簡單*args
是符合以位置傳參的參數,**kwargs
是符合按關鍵字傳參的參數,這樣就可以接收所有參數。 wrapper(test)
接收值傳給f
,在內圈函數中,ret = f(*args,**kwargs)
這函數是執行裝飾的函數的程式碼。再傳回執行的值,最後回傳這個函數。此程式碼的執行結果為:
2 3 1 4
如下圖所示
由此可見
在 #函數inner
中,print(3)
是執行裝飾函數前的操作,print(4)
是執行裝飾函數後的操作。
理解起來可能有些困難。所以最好還是動手試試。
基礎小練習
'''1. 默写装饰器固定格式 2. 写一个加减功能的装饰器 '''
以上是Python是基礎 裝飾器及練習的詳細內容。更多資訊請關注PHP中文網其他相關文章!