Python高效條件分支實現方法|深入解析if-elif-else、字典類型、match-case

1. 前言

Python 以其簡潔的語法和直觀的設計受到許多程式設計師的喜愛。然而,許多人可能會驚訝地發現,Python 並沒有像其他程式語言一樣提供「switch-case」語法。因此,在 Python 中,開發者需要使用「if-elif-else」或「字典(dictionary)」來實現類似的功能。

本文將逐步介紹 Python 中傳統的條件分支方法、使用字典作為替代方案,以及 Python 3.10 引入的全新「match-case」語法。透過這些學習,您將能夠掌握在 Python 中高效實現條件分支的方法,並應用於實際的程式開發中。

2. 為什麼 Python 沒有 switch 語法?

Python 沒有採用 switch-case 語法的主要原因是其設計哲學:簡潔與可讀性。Python 的設計者一直致力於讓語言保持簡單,並避免冗長或重複的語法。雖然 switch-case 在其他語言中相當有用,但在 Python 中,透過「if-elif-else」或字典即可達成相同的功能,因此並未特別引入 switch-case 語法。

事實上,Python 的官方文件也提到,if-elif-else 語法已經足以替代 switch-case。以下是一個 C 語言的 switch-case 語法範例:

switch (value) {
  case 1:
    printf("Value is 1");
    break;
  case 2:
    printf("Value is 2");
    break;
  default:
    printf("Other value");
}

在 Python 中,我們可以使用 if-elif-else 來實現相同的功能:

value = 1
if value == 1:
    print("Value is 1")
elif value == 2:
    print("Value is 2")
else:
    print("Other value")

透過這種方法,即使沒有 switch-case,Python 仍然能夠輕鬆處理條件分支。


3. if-elif-else 的使用範例

在 Python 中,最基本的條件分支方法是「if-elif-else」語法。這種方法能夠根據不同的條件執行不同的處理,並且非常直觀且容易理解。以下是一個典型的使用範例:

value = 100
if value < 50:
    print("數值較小")
elif value < 100:
    print("數值中等")
else:
    print("數值較大")

在這段程式碼中,根據變數 value 的數值大小,程式會輸出不同的訊息。if-elif-else 語法讓條件判斷變得直觀且容易閱讀。

當條件增多時的問題

然而,當 if-elif-else 的層級變深,程式碼可能會變得難以閱讀。特別是當條件變得更為複雜時,使用「字典(dictionary)」來進行條件分支判斷可能會是一個更好的選擇。

4. 使用字典(dictionary)進行條件分支

在 Python 中,我們可以利用字典來模擬 switch-case 語法,這是一種簡潔且高效的方法。字典是一種儲存鍵值對(key-value pair)的資料結構,可以用來對應不同的條件與相應的處理方式。

以下的範例根據使用者輸入的數值,對應不同的輸出結果:

numbers = {1: "一", 2: "二", 3: "三"}
value = int(input("請輸入 1~3 之間的數字: "))

if value in numbers:
    print(f"選擇的數字: {numbers[value]}")
else:
    print("請輸入 1~3 之間的數字")

透過這種方式,即使有較多的條件,程式碼仍然能夠保持簡潔且易於維護。

使用字典的優勢

與傳統的 if-elif-else 相比,使用字典進行條件分支具有以下優勢:

  • 提高可讀性:當條件數量較多時,字典可以使程式碼更易於閱讀。
  • 維護更容易:新增或修改條件時,只需要更新字典內容,而不需要修改多個 if-elif-else 結構。
  • 執行效率較高:字典查找的速度通常比多層級的 if-elif-else 結構更快。
侍エンジニア塾

5. Python 3.10 的新功能:match-case 語法

從 Python 3.10 開始,Python 引入了一種新的條件分支語法:「match-case」,它的語法與 switch-case 十分相似,可以簡潔地描述多個條件。這個新功能特別適用於模式匹配(Pattern Matching),與傳統的 if-elif-else 或字典方式相比,它可以大幅提升程式碼的可讀性和維護性。

match-case 的基本語法

以下是 match-case 語法的基本範例:

def check_value(value):
    match value:
        case 1:
            print("選擇的是一")
        case 2:
            print("選擇的是二")
        case _:
            print("選擇的不是 1 或 2")

在這段程式碼中,變數 value 會根據不同的 case 進行對應的處理。case _ 則類似於 switch-case 中的 default,用來處理所有未被明確列出的條件。

6. match-case 的應用範例

match-case 語法不僅可以用來判斷單一變數的值,還可以用來處理更複雜的條件,例如根據列表(list)的長度或資料型態來進行模式匹配。

針對多種條件的 match-case

def process_data(data):
    match data:
        case [x, y]:
            print(f"列表包含兩個元素: {x}, {y}")
        case [x, y, z]:
            print(f"列表包含三個元素: {x}, {y}, {z}")
        case _:
            print("列表的元素數量不符合預期")

在這個範例中,match-case 會根據列表的元素數量進行不同的處理。這樣的寫法比傳統的 if-elif-else 更加簡潔且易讀。


RUNTEQ(ランテック)|超実戦型エンジニア育成スクール

7. if-elif-else、字典(dictionary)、match-case 的比較

每種條件分支方法都有其優勢與缺點。以下是它們的比較:

方法優點缺點
if-elif-else簡單直觀,適用於少量條件當條件過多時,程式碼會變得冗長且難以維護
字典(dictionary)可讀性高,適用於大量條件並非所有條件判斷都適用,例如需要執行額外邏輯的情況
match-case適用於多條件分支與模式匹配,程式碼簡潔僅適用於 Python 3.10 以上版本

這張比較表可以幫助您選擇最適合的條件分支方法。特別是 match-case 語法在處理複雜的模式匹配時表現優異,能夠避免 if-elif-else 的冗長結構。

8. 總結

儘管 Python 沒有 switch-case 語法,但我們仍然可以透過 if-elif-else、字典(dictionary)、以及 Python 3.10 引入的 match-case 來實現高效的條件分支。

特別是 match-case 語法,由於其優秀的模式匹配能力,可以讓程式碼更簡潔且易於維護。因此,在開發時,根據實際需求選擇合適的條件分支方法,將有助於撰寫更高效且可讀性更高的 Python 程式碼。

透過理解這些方法,您將能夠在不同的專案需求中靈活運用它們,進一步提升程式設計的效率與品質。