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} 歲")
結構化模式匹配的優勢:
- 可讀性:減少了多重
if-elif-else
的複雜度。 - 模式強大:支援解包、型別匹配、守衛條件等。
- 靈活性:可匹配資料結構如列表、字典、類例項等。