模式匹配
在 Python 3.10 中引入了 match
语句,它是一种强大的模式匹配工具,类似于其他语言中的 switch
语句,但功能更强大。match
语句可以用于匹配不同的模式,并根据匹配结果执行相应的代码块。
match
语句的基本语法
match
语句的基本语法match subject:
case pattern1:
# 处理 pattern1
case pattern2:
# 处理 pattern2
case _:
# 默认情况
subject
:需要匹配的对象。pattern
:匹配的模式,可以是字面值、变量、类型、结构等。_
:默认情况,类似于switch
语句中的default
。
match
的用法和场景
match
的用法和场景1. 匹配字面值
匹配具体的值(如整数、字符串等)。
def handle_status(status):
match status:
case 200:
print("Success")
case 404:
print("Not Found")
case 500:
print("Server Error")
case _:
print("Unknown Status")
handle_status(200) # 输出 "Success"
handle_status(404) # 输出 "Not Found"
2. 匹配类型
匹配对象的类型。
def handle_value(value):
match value:
case int():
print("Integer")
case str():
print("String")
case list():
print("List")
case _:
print("Unknown Type")
handle_value(42) # 输出 "Integer"
handle_value("Hello") # 输出 "String"
handle_value([1, 2, 3]) # 输出 "List"
3. 匹配结构
匹配复杂的数据结构(如列表、字典等)。
def handle_data(data):
match data:
case [x, y]:
print(f"List with two elements: {x}, {y}")
case {"name": name, "age": age}:
print(f"Dictionary with name: {name}, age: {age}")
case _:
print("Unknown Structure")
handle_data([1, 2]) # 输出 "List with two elements: 1, 2"
handle_data({"name": "Alice", "age": 25}) # 输出 "Dictionary with name: Alice, age: 25"
4. 匹配嵌套结构
匹配嵌套的数据结构。
def handle_nested(data):
match data:
case {"user": {"name": name, "age": age}}:
print(f"User: {name}, Age: {age}")
case _:
print("Unknown Nested Structure")
handle_nested({"user": {"name": "Bob", "age": 30}}) # 输出 "User: Bob, Age: 30"
5. 匹配变量
将匹配的值绑定到变量。
def handle_variable(data):
match data:
case (x, y):
print(f"Tuple with elements: {x}, {y}")
case _:
print("Unknown Data")
handle_variable((10, 20)) # 输出 "Tuple with elements: 10, 20"
6. 匹配条件
在模式中添加条件(if
语句)。
def handle_condition(data):
match data:
case (x, y) if x > y:
print(f"First element is greater: {x} > {y}")
case (x, y) if x < y:
print(f"Second element is greater: {x} < {y}")
case _:
print("Unknown Condition")
handle_condition((10, 5)) # 输出 "First element is greater: 10 > 5"
handle_condition((3, 7)) # 输出 "Second element is greater: 3 < 7"
7. 匹配枚举
匹配枚举类型。
from enum import Enum
class Status(Enum):
SUCCESS = 200
NOT_FOUND = 404
SERVER_ERROR = 500
def handle_enum(status):
match status:
case Status.SUCCESS:
print("Success")
case Status.NOT_FOUND:
print("Not Found")
case Status.SERVER_ERROR:
print("Server Error")
case _:
print("Unknown Status")
handle_enum(Status.SUCCESS) # 输出 "Success"
8. 匹配通配符
使用 _
匹配任意值。
def handle_wildcard(data):
match data:
case (_, _):
print("Tuple with two elements")
case _:
print("Unknown Data")
handle_wildcard((1, 2)) # 输出 "Tuple with two elements"
总结
match
语句的常见用法包括:
匹配字面值。
匹配类型。
匹配结构。
匹配嵌套结构。
匹配变量。
匹配条件。
匹配枚举。
匹配通配符。
match
语句非常适合处理复杂的条件分支和数据结构匹配,可以显著提高代码的可读性和简洁性!
最后更新于
这有帮助吗?