在代碼運行期間動態的增長功能,而不改變原代碼的功能的方式稱之爲裝飾器。函數
裝飾器函數符合高階函數,由於它傳入的參數和返回值都是函數,它也符合嵌套函數。spa
代碼示例:code
def log(func): def warpper(*args,**kw): print('hello') return func() return warpper @log def func(): print( 'world') func()
執行@log--->log函數--->返回一個函數warpper--->調用func函數(實際執行的是warpper函數)--->調用原始函數funcblog
1.執行裝飾器函數的時候,被裝飾函數看成參數傳遞給裝飾器函數
2.裝飾器函數的返回值會從新賦值給裝飾器函數的內部函數,此時裝飾器函數的參數指向由原先的被裝飾函數變爲裝飾器函數的內部函數。
3.調用被裝飾函數的時候,執行的是裝飾器函數的內部函數的函數體class