Python 3.10 引入了一个新的特性:结构化模式匹配,通常称为“匹配案例”(match
case
)语句。这是 Python 语言中的一个重大改进,为 Python 添加了类似于其他一些编程语言(如 Rust 或 Scala)中的模式匹配功能。
基本概念
match
case
语句是一种高级的条件分支结构,它允许您将一个值与一系列模式进行匹配,并根据匹配到的模式执行不同的代码块。这在处理复杂的数据结构时尤为有用。
基本语法
基本的 match
case
语句结构如下:
match subject:
case pattern1:
# 执行代码块1
case pattern2:
# 执行代码块2
...
case _:
# 如果前面的模式都不匹配,执行这里的代码
这里,subject
是要匹配的对象,pattern1
、pattern2
等是要匹配的模式。如果 subject
匹配了某个模式,就会执行相应的代码块。
模式类型
- 字面值模式:匹配具体的值,如数字、字符串等。
- 变量模式:匹配任何值,并将该值绑定到变量。
- 序列模式:匹配序列(如列表或元组)的结构。
- 映射模式:匹配字典的键和值。
- 类模式:匹配特定类的实例,并可以提取其属性。
- 通配符:使用下划线(
_
)作为通配符,匹配任何值。
示例
下面是一个简单的示例,
演示了如何使用 match
case
语句来匹配不同类型的数据:
def handle_message(msg):
match msg:
case "hello":
return "Hi there!"
case ["error", code]:
return f"Error occurred with code {code}"
case {"type": "greeting", "name": name}:
return f"Hello, {name}"
case _:
return "Unknown message"
# 使用示例
print(handle_message("hello")) # 输出: Hi there!
print(handle_message(["error", 404])) # 输出: Error occurred with code 404
print(handle_message({"type": "greeting", "name": "Alice"})) # 输出: Hello, Alice
print(handle_message(12345)) # 输出: Unknown message
在这个例子中:
- 当
msg
是字符串"hello"
时,匹配第一个案例。 - 当
msg
是包含两个元素的列表,且第一个元素是"error"
时,匹配第二个案例,并将第二个元素绑定到变量code
。 - 当
msg
是包含特定键的字典时,匹配第三个案例,并将"name"
键对应的值绑定到变量name
。 - 如果前面的模式都不匹配,
_
(通配符)将匹配任何值。
match
case
语句提供了一种更为结构化和易读的方式来处理复杂的条件分支,尤其是在需要根据不同类型和结构的数据执行不同操作时。