Python 3.10 引入了一个新的特性:结构化模式匹配,通常称为“匹配案例”(match case)语句。这是 Python 语言中的一个重大改进,为 Python 添加了类似于其他一些编程语言(如 Rust 或 Scala)中的模式匹配功能。
基本概念
match case 语句是一种高级的条件分支结构,它允许您将一个值与一系列模式进行匹配,并根据匹配到的模式执行不同的代码块。这在处理复杂的数据结构时尤为有用。
基本语法
基本的 match case 语句结构如下:
match subject:case pattern1:# 执行代码块1case 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 语句提供了一种更为结构化和易读的方式来处理复杂的条件分支,尤其是在需要根据不同类型和结构的数据执行不同操作时。