裝飾器本質上就是一個函數,只不過它的參數是另一個函數,通過執行裝飾器,給原本的函式添加功能(在函式執行之前,活著函式執行之後)。
decorator = decorator(target_function) decorator()得到執行的結果 @decorator
上面的 decorator = decorator(target_function),首先將target_function的記憶體位址作為參數傳到decorator裡面,decorator執行的結果也就會是一個記憶體位址,
最基本的裝飾器寫法
def decorator(target_function) def pre_function(): target_function() return pre_function @decorator def hello(): print(1) return 2
這樣的作法就是將目標函式作為參數target_function傳入裝飾器,然後在return的時候執行裝飾器要做的事情,但是上面這個範例,在執行hello函式的時候,不會得到原本的返回值2,
針對不定參數
*args可以代表所有的沒有指定名稱的參數→也就是所有的沒有指定名稱的參數都會被包到args這個tuple裡面(不限數量)
**kwargs就是代表所有的有指定名稱的參數→會包進一個dict