裝飾器大概是 Python 裡最讓人「看得懂每個字,但連起來就懵」的東西。
多數教學一上來就丟出 @decorator 語法,然後開始解釋 functools.wraps……但你心裡真正的疑問其實是:這個 @ 到底對我的函式做了什麼?
這份教學換個順序:先不講 @,而是從「函式也是東西」開始,讓你自己一步步推出裝飾器。等你親手寫出一個能用的裝飾器之後,才會發現 @ 只是一行簡寫,沒有半點魔法。
這份教學包含什麼
- 一句話說清裝飾器
- 前提:函式是「東西」——全篇的地基
- 手寫第一個裝飾器(完全不用 @)
- @ 語法糖登場:拆穿它到底做了什麼
- 能上戰場的完整版(*args、return、wraps)
- 為什麼要有裝飾器:痛點對比
- 進階:帶參數的裝飾器(為什麼是三層)
- 進階:多個裝飾器疊加(順序詳解)
- 進階:類別裝飾器
- Python 自帶的裝飾器
- 四個最常見的坑 + 避坑範本
- 速查表
先試吃一口
裝飾器的完整原理,其實就這一段:
def run_twice(func):
def wrapper():
func()
func()
return wrapper收進來一個函式 → 造一個新函式 → 在新函式裡多叫一次原函式 → 把新函式交出去。就這樣。
唯一的毛病是使用時要寫 say_hi = run_twice(say_hi),又長又容易忘。所以 Python 給了 @ 這個簡寫。
閱讀完整版
完整的 12 節內容、每個例子的實際執行結果、可直接複製的避坑範本,以及速查表,請看這裡:
完整版支援深色模式、程式碼語法上色,手機閱讀也做了適配。
>
0 條回應