python:初识v3.10结构化模式匹配

本文介绍了Python 3.10引入的结构化模式匹配特性,包括match和case语句的使用,通过示例展示了如何匹配不同类型的模式,如字面值、变量绑定、类实例等,并解释了通配符_、守护项和模式嵌套的用法。
摘要由CSDN通过智能技术生成

python3.10增加了采用模式加上相应动作的 match 语句 和 case 语句 的形式的结构化模式匹配。 模式由序列、映射、基本数据类型以及类实例构成。 模式匹配使得程序能够从复杂的数据类型中提取信息、根据数据结构实现分支,并基于不同的数据形式应用特定的动作。

语法与操作

•模式匹配的通用语法如下:

match subject:
  case <pattern_1>:
      <action_1>
  case <pattern_2>:
      <action_2>
  case <pattern_3>:
      <action_3>
  case _:
      <action_wildcard>

match 语句接受一个表达式并将其值与以一个或多个 case 语句块形式给出的一系列模式进行比较。 具体来说,模式匹配的操作如下:

•使用具有特定类型和形状的数据 (subject)•针对 subject 在 match 语句中求值•从上到下对 subject 与 case 语句中的每个模式进行比较直到确认匹配到一个模式。•执行与被确认匹配的模式相关联的动作。•如果没有确认到一个完全的匹配,则如果提供了使用通配符 _ 的最后一个 case 语句,则它将被用作已匹配模式。 如果没有确认到一个完全的匹配并且不存在使用通配符的 case 语句,则整个 match 代码块不执行任何操作。

简单模式:匹配一个字面值

让我们把这个例子看作是模式匹配的最简单形式:一个值,即主词,被匹配到几个字面值,即模式。在下面的例子中,status 是匹配语句的主词。模式是每个 case 语句,字面值代表请求状态代码。匹配后,将执行与该 case 相关的动作:

def http_error(status):
    match status:
        case 400:
            return "请求错误!"
        case 404:
            return "页面不存在!"
        case 418:
            return "yyds!"
        case _:
            return "网络有点问题!"


if __name__ == '__main__':
    print(http_error(500))

运行结果

网络有点问题!

Process finished with exit code 0

如果传给上述函数的 status 为 418,则会返回 "yyds!"。 如果传给上述函数的 status 为 500,则带有_的 case 语句将作为通配符匹配,并会返回 "网络有点问题!"。 请注意最后一个代码块:变量名_将作为 通配符 并确保目标将总是被匹配。_的使用是可选的。

•你可以使用 | (“ or ”)在一个模式中组合几个字面值:

def http_error(status):
  match status:
      case 400 | 404 | 403:
          return "请求错误!"
      case _:
          return "网络有点问题!"

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值