Last Updated on 2021-10-18 by Clay
switch 是一種在眾多程式語言當中都有支援的語法,跟 if-else 功能很相似,不過跟設定任意條件的 if-else 不同,switch 更是針對單一條件的不同情況來執行程式碼,在許多時候比 if-else 來得更直覺。
一直以來 Python 是沒有 switch 語法的,不過從 Python 3.10 開始,使用 match
語法便能使用類似 switch 語法的條件分歧來執行不同情況的程式碼。
下載安裝 Python 3.10.0a6
當然,現在 (2021/04/03) Python 3.10 尚未推出,不過已經有了開發人員預覽版本可供下載測試: https://www.python.org/downloads/release/python-3100a6/
可以來到網頁最底下的 Files 區塊選擇適合你作業系統的版本下載。
下載結束之後便進行安裝。(圖片為 MacOS 安裝的過程)
安裝完畢之後,若是在系統中或終端機中能看到有 Python 3.10 的版本,那便是安裝成功了。
使用 match 語法進行條件判斷
整數判斷
以下我們使用一個最簡單的範例來示範如何在 Python 3.10 中使用 match
進行數值的判斷。
# coding: utf-8
def main():
n = 3
match (n):
case (1):
print("OK")
case (2):
print("YES")
case (3):
print("THANKS")
case _:
print("Something error")
if __name__ == "__main__":
main()
Output:
THANKS
match
後接著要判斷的變數,而下方縮排後的 case
則是判斷不同的變數值,並在不同的變數值時執行的不同的程式區塊。
而 switch 語法中的 default
,在 Python 中則是以 case _
來取代。
除了整數判斷以外的判斷式
Python 中的 match
與典型的 switch 不同,甚至還能做到如判斷變數資料型態之類的功用:
# coding: utf-8
def main():
n = "Nice"
match (n):
case str() | bytes():
print("IT'S A STRING")
case int() | float():
print("IT'S A NUMBER")
case list() | dict():
print("IT's LIST OR DICTIONARY")
case _:
print("DEFAULT")
if __name__ == "__main__":
main()
Output:
IT'S A STRING
由於 Python 的 match
功能與典型的 switch 不太相同,可以做到很多較為彈性的判斷,故官方甚至得意地稱其為 switch 2.0。以上只是幾個簡單的範例,大家可以再測試看看 match 還能做到的哪些功能。
References
- https://hackaday.com/2021/04/02/python-will-soon-support-switch-statements/
- https://www.python.org/downloads/release/python-3100a6/
- https://towardsdatascience.com/switch-case-statements-are-coming-to-python-d0caf7b2bfd3