python match用法

__username發表於2024-12-04

Python 3.10 引入了一個重要的新特性:結構化模式匹配(Structural Pattern Matching),主要透過 match 語句實現。它類似於其他程式語言(如 C、JavaScript、Go)中的 switch-case 語句,但功能更強大,支援更復雜的模式匹配。

基本語法:

match 變數:
    case 模式1:
        # 匹配模式1時執行的程式碼
    case 模式2:
        # 匹配模式2時執行的程式碼
    case _:
        # 預設分支,相當於 switch-case 中的 "default"

使用示例:

1. 簡單值匹配:

def http_status(code):
    match code:
        case 200:
            return "OK"
        case 400:
            return "Bad Request"
        case 404:
            return "Not Found"
        case _:
            return "Unknown Status"

print(http_status(200))  # 輸出: OK

2. 匹配多種模式:

number = 5
match number:
    case 1 | 3 | 5 | 7 | 9:
        print("奇數")
    case 2 | 4 | 6 | 8 | 10:
        print("偶數")
    case _:
        print("其他")

3. 解包元組或列表:

point = (1, 2)
match point:
    case (0, 0):
        print("原點")
    case (0, y):
        print(f"在Y軸上,Y座標為 {y}")
    case (x, 0):
        print(f"在X軸上,X座標為 {x}")
    case (x, y):
        print(f"座標為 ({x}, {y})")

4. 使用萬用字元 _

萬用字元 _ 可以匹配任何值,常用於預設情況或忽略某些值。

data = ("John", 30)
match data:
    case (name, age):
        print(f"Name: {name}, Age: {age}")
    case _:
        print("Unknown data format")

5. 類和物件匹配:

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

person = Person("Alice", 25)

match person:
    case Person(name="Alice", age=25):
        print("匹配到 Alice,25 歲")
    case Person(name=name, age=age):
        print(f"匹配到 {name}, {age} 歲")

結構化模式匹配的優勢:

  1. 可讀性:減少了多重 if-elif-else 的複雜度。
  2. 模式強大:支援解包、型別匹配、守衛條件等。
  3. 靈活性:可匹配資料結構如列表、字典、類例項等。

相關文章