以 match-case 替代 if-elif-else

Python 3.10 一大特點 Structural Pattern Matching

於 Python 3.10 之前, 我們如果希望在 A 情況下執行動作a; B 情況下執行動作b; 在 C 情況下執行動作c; ...; 雖然沒有其他語言常用的 switch-case 語法, 但是用 if-elif 其實也可以達到目的.

我們嘗試以真實的程式碼來試做一下. 如下, boundingBox 共有八個控制點, 用戶點選某控制點進行拖拉, 游標樣式與 boundingBox 大小要跟著改變. 很明顯這八個控制點處理方法都不一樣. 所以我們必須先知道用戶到底點哪個控制點.

如果用 if-elif-else 實作, 也能順利達成, 稍微囉嗦一點而已.

比較上面 if-elif 與下面改用 match-case (不過前提是要將 Python 升級為 3.10 或以上, 這犧牲了一點與其他模組如 Tensorflow 相容性), 語法簡潔許多, 也較易讀性.

match-case 不像其他語言用 switch-case, 如其功能取名為 Structural Pattern Matching, 有更複雜的樣式比對, 後續我們遇到適合改寫的程式碼再舉例.