Skip to content

[Python] 3.10 先覽版本開始支援 switch 功能(透過 match 語法)

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


由於 Pythonmatch 功能與典型的 switch 不太相同,可以做到很多較為彈性的判斷,故官方甚至得意地稱其為 switch 2.0。以上只是幾個簡單的範例,大家可以再測試看看 match 還能做到的哪些功能。


References


Read More

Tags:

Leave a Reply