Python 中的 match
语句
在 Python 3.10 及更高版本中,引入了 match
语句,这是一种新的结构化模式匹配机制。match
语句允许你根据不同的模式来执行不同的代码块,类似于其他编程语言中的 switch
语句,但功能更加强大和灵活。
基本概念
match
语句的基本结构如下:
match subject:
case pattern1:
# 代码块1
case pattern2:
# 代码块2
case pattern3:
# 代码块3
case _:
# 默认代码块
subject
是要匹配的值。case
后面跟着一个模式,如果模式匹配成功,则执行相应的代码块。_
是一个通配符,用于匹配任何情况,相当于default
分支。
示例讲解
让我们通过一些具体的例子来理解 match
语句的用法。
示例1:简单的值匹配
假设我们有一个变量 status
,它可能的值是 "success"
、"error"
或 "pending"
。我们可以使用 match
语句来根据不同的值执行不同的操作。
status = "success"
match status:
case "success":
print("操作成功")
case "error":
print("操作失败")
case "pending":
print("操作等待中")
case _:
print("未知状态")
在这个例子中,match
语句会根据 status
的值来匹配相应的 case
分支,并执行对应的代码块。
示例2:模式匹配
match
语句不仅支持简单的值匹配,还支持更复杂的模式匹配。例如,我们可以匹配元组、列表、字典等结构。
point = (1, 2)
match point:
case (0, 0):
print("原点")
case (x, 0):
print(f"在x轴上,x={x}")
case (0, y):
print(f"在y轴上,y={y}")
case (x, y):
print(f"在坐标({x}, {y})")
case _:
print("未知点")
在这个例子中,match
语句会根据 point
的值来匹配相应的模式,并执行对应的代码块。
示例3:带条件的模式匹配
我们还可以在模式中添加条件,称为“卫语句”(guard)。
age = 25
match age:
case x if x < 18:
print("未成年人")
case x if 18 <= x < 65:
print("成年人")
case x if x >= 65:
print("老年人")
case _:
print("未知年龄")
在这个例子中,match
语句会根据 age
的值和条件来匹配相应的模式,并执行对应的代码块。
拓展内容
match
语句还支持更多的模式匹配特性,例如:
- 解构赋值:可以从匹配的模式中提取值并赋给变量。
- 类型匹配:可以匹配特定类型的对象。
- 组合模式:可以将多个模式组合在一起进行匹配。
下面是一个解构赋值的示例:
data = ("add", 10, 20)
match data:
case ("add", x, y):
print(f"加法操作:{x} + {y} = {x + y}")
case ("sub", x, y):
print(f"减法操作:{x} - {y} = {x - y}")
case ("mul", x, y):
print(f"乘法操作:{x} * {y} = {x * y}")
case ("div", x, y):
print(f"除法操作:{x} / {y} = {x / y}")
case _:
print("未知操作")
在这个例子中,match
语句会根据 data
的值来匹配相应的模式,并从模式中提取值进行计算。