Python 裝飾器
- 有時會修改既有的函式,不想更改原始程式碼,常見的例子,就是加入一個除錯的陳述式,來查看有哪些引數被傳入
- 裝飾器decorator 是一種函式,他會接收一個函式,並回傳另一個函式
*args
&**kwargs
- 內部函式
- 當成引數的函式
document_it()
函式會定義一個裝飾器,他會做以下的工作:
- 印出函式的名稱,與引數的值
- 用引數來執行函式
- 印出結果
- 回傳修改後的函式,以供使用
1 | def document_it(func): |
- 無論將什麼
func
傳給document_it()
,都可以得到一個新的函式,裡面有document_it()
加入的陳述式 - 裝飾器不一定要執行任何
func
的程式,但document_it()
會在過程中呼叫func
,讓你可以取得func
的結果及所有額外的東西
1 | def add_ints(a, b): |
- 也可以在想要裝飾器的函式前添加 @decorator_name,來取代上述的手動指派裝飾器
1 | @document_it |
- 同一個函式可以有兩個以上的裝飾器
1 | def square_it(func): |
- 最靠近函式的裝飾器,(在def正上方),會先執行,無論順序為何,最終的結果都一樣的,但過程中有不同的步驟
1 | @document_it |
- 改變裝飾器的順序
1 | @square_it |