00 · 理解本課程所需的 Python 機制
理解本課程所需的 Python 機制¶
從運算子分派、裝飾器與 dataclass 開始,弄清畫面上的運算式如何到達函式庫方法。
閱讀本章前
你已能閱讀函式、類別、條件分支與基本型別標註。
完成本章後,你可以
- 用自己的話說明「理解本課程所需的 Python 機制」中的數學定義
- 指出定義在 Python 資料中的表示方式
- 依據實際實作預測一段小型執行過程
數學定義
在 Python 中,`a + b` 和 `a == b` 分別要求物件的 `__add__` 與 `__eq__`。裝飾器在定義階段接收並替換函式物件。
資料表示
凍結的 dataclass 保存不可變的數學值。被 `@log` 包裝的方法在內部回傳結果與延遲建立的訊息,包裝器只向呼叫者公開結果。
Python 實作
`+` → `__add__`; `==` → `__eq__`; `@log` → `inner`
與本章一起閱讀的實作與測試
數學定義
數學定義¶
在 Python 中,a + b 和 a == b 分別要求物件的 __add__ 與 __eq__。裝飾器在定義階段接收並替換函式物件。
資料表示
資料表示¶
凍結的 dataclass 保存不可變的數學值。被 @log 包裝的方法在內部回傳結果與延遲建立的訊息,包裝器只向呼叫者公開結果。
Python 實作
Python 實作¶
log 裡的 inner 呼叫原方法,取出 (result, message),依設定輸出訊息,再回傳 result;@wraps 保留原函式資訊。
本課程使用的精確對應關係:
執行過程
執行過程¶
方法本體先完成,包裝器才能取得訊息。因此遞迴內層結果會先於外層日誌出現。
執行前預測
預測 `structural_str()` 與 `+` 各會呼叫哪段程式,並寫下兩行輸出。
實驗 · 理解本課程所需的 Python 機制
尚未執行
⌘ / Ctrl + Enter
輸出
請先寫下預測,再執行。
用測試核對
用測試核對¶
測試檢查回傳值、公開簽章與延遲訊息,避免裝飾器改變函式庫介面。
適用範圍
適用範圍¶
本章不重講迴圈與變數等基本語法,只解釋理解本函式庫不可少的後設程式行為。