Python Switch Case 語句:初學者指南

Python、與一些其他程式設計語言不同,在版本3.10之前並未包含傳統的switch case語句。在這個教學文中,我們將探索Python的switch case等效物如何運作,以及如何使用Python的結構模式匹配功能來實現它。

了解傳統的Switch Case語句

在Python 3.10之前,Python開發者必須使用多個if-elif-else語句或字典來模擬switch case功能。以下是使用if-elif-else的基本例子:

day = input("Enter the day of the week: ").capitalize() if day == "Saturday" or day == "Sunday": print(f"{day} is a weekend.") elif day in ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"]: print(f"{day} is a weekday.") else: print("That's not a valid day of the week.")
Saturday is a weekend.

引入Python 3.10中的Match和Case

隨著Python 3.10的推出,match語句和case關鍵詞被引进,提供了一個類似於其他語言中傳統switch case語句的更优雅的解決方案。

了解基本語法

讓我們考慮一個情境,我們想要將星期的每一天分類為周末或工作日的類別,並識別出特定的日子。以下是我們如何使用match語句:

day = input("Enter the day of the week: ").capitalize() match day: case "Saturday" | "Sunday": print(f"{day} is a weekend.") case "Monday" | "Tuesday" | "Wednesday" | "Thursday" | "Friday": print(f"{day} is a weekday.") case _: print("That's not a valid day of the week.")
Monday is a weekday.
  • 用戶輸入和capitalize()方法:我們先從用戶處獲取星期的哪一天作為輸入,並使用capitalize()方法將其正確格式化(首字母大寫,其他小寫)。
  • 使用match語句:然後我們使用match來評估day變量。
  • 使用 case 進行模式匹配
    • 第一個 case 檢查輸入是否為 “Saturday” 或 “Sunday”。符號 “|” 也稱為位元或運算子,用於匹配多個模式中的任何一個。如果輸入是這些日子之一,它會列印出該天是週末。
    • 第二個 case 通過檢查每個工作日來涵蓋所有工作日。如果輸入與任何工作日匹配,它會列印出該天是工作日。
  • 後備案例 (_):最後一個 case 作為預設(`else` 語句),捕獲所有未知的輸入,指示輸入無效。
  • 沒有 break 語句:注意到我們不需要在每個 case 之後使用 break。Python 在成功匹配後自動退出 match 語句。

match-case 語法與一系列 if-elif-else 語句相比,更具可讀性和簡潔。

Python 中 Match 和 Case 的高級使用案例

數據科學應用

Python 的 match-case 語句在數據科學中的數據預處理任務中可以極其有用。預處理通常涉及根據特定條件將數據分類到不同的群組。

例如,在動物數據集中,您可能希望根據它們的類別將它們分類,如哺乳動物、鳥類、爬行動物等。以下是個簡化的例子:

animal = "Eagle" match animal: case "Eagle" | "Parrot": print("Bird") case "Lion" | "Tiger": print("Mammal") case "Python" | "Crocodile": print("Reptile") case _: print("Unknown Class")
Bird

這種方法簡化了複雜的 if-else 邏輯,並使代碼更具可讀性和可維護性,尤其是在處理具有多個類別的大型數據集時。

機器學習情境

在機器學習中,處理不同類型的數據輸入是至關重要的。可以使用 match-case 結構進行特徵提取或模型推理。例如,在一個預測天氣條件的機器學習模型中,可以使用 match-case 將溫度範圍分類為 ‘Cold’、’Warm’、’Hot’,然後這些範圍可以用作模型的輸入特徵。

Python 選擇語句的常見陷阱和最佳實踐

除錯技巧

在使用 Python 的 match-case 時,一個常見的錯誤是忘記在默認情況下包含底線(_),這類似於傳統 if-else 語句中的 ‘else’。如果沒有匹配到任何特定情況,這可能會導致意外的行為。總是包含一個默認情況來處理未預期或雜項的值。

性能考慮

雖然 match-case 語句是一個強大的工具,但它對 Python 代碼的性能影響,特別是對於大規模應用程序,應該予以考慮。在案例數量很大或模式匹配複雜的情況下,性能可能會受到影響。在现实世界場景中對您的代碼進行剖析和測試,以了解和緩解任何潛在的性能問題至關重要。

Python Match-Case 對照傳統 Switch-Case

比較分析

Python 的 match-case 和 Java 或 C++ 這類語言中的傳統 switch-case 語句有顯著的不同。例如,在 Java 中,switch 語句僅限於匹配標量值(如整數和枚舉類型),而 Python 的 match-case 提供了更靈活的模式匹配功能,允許匹配複雜數據類型,如序列和類實例。這使得 Python 的實現更加強大,但也需要對模式匹配概念有更深入的理解。

轉型指南

對於熟悉 C++ 或 Java 之類語言中的傳統 switch-case 語句的程式員來說,转移到 Python 的 match-case 需要從簡單的值匹配转变為模式匹配的思考方式。

重要的是要理解,Python 的 match-case 不僅僅是一個 switch-case;它是一個多功能的工具,用於解構數據類型和從複雜結構中提取信息。熟練不同數據類型和模式是掌握其使用的關鍵。

結論

Python 3.10 版中引入的 match 和 case 語句為熟悉其他語言中的 switch case 語句的開發者提供了一個久候的功能。它提供了一個 cleaner 和更 concise 的方法來處理多個條件,從而提高了程式碼的可讀性和可維護性。

您可以在我們的完整教程中了解更多關於 Python 函數,並者在我們的 進階 Python 課程 中探索這個及其他概念。

Source:
https://www.datacamp.com/tutorial/python-switch-case