Python 中的 `match` 语句

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 的值来匹配相应的模式,并从模式中提取值进行计算。

  • 8
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

需要重新演唱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值