Skip to content

match 语句(3.10 新增)

https://docs.python.org/zh-cn/3/tutorial/controlflow.html#match-statements
https://docs.python.org/zh-cn/3/reference/compound_stmts.html#match

match 语句

🐍 3.10 新版功能.

  • python 中的 match 语句也被称作匹配语句,用于进行模式匹配。
  • 模式匹配接受一个模式作为输入(跟在 case 后),一个目标值(跟在 match 后)。
  • 该模式(可能包含子模式)将与目标值进行匹配。
  • 逻辑上与 if ... elif ... else 类似

match 语句类似 C 语言中的 switch 语句;代码示例:

python
flag = False

def http_error(status):
    match status:
        case 400:                   # 字面值模式
            print('错误请求')
        case 401 | 403 | 405:       # 或模式
            print('不允许访问')
        case 404:
            print('未找到')
        case 499 if flag is True:   # 约束项
            print('超时')
        case 500 | 502 as code:     # AS 模式
            print(f'{code} 服务器错误')
        case _:                     # 通配符模式,_ 总是会匹配成功
            print('其它错误')

http_error(401)     # 不允许访问
http_error(499)     # 其它错误
http_error(500)     # 500 服务器错误
http_error(504)     # 其它错误
  • 字面值模式就是直接进行值比较的模式,对于单例 NoneTrueFalse ,会使用 is 运算符。
  • 或模式是由竖杠 | 分隔的两个或更多的模式。
  • case 中的 if约束项)必须成立才能让 case 语句块中的代码被执行。
  • AS 模式将关键字 as 左侧的或模式与目标值进行匹配。简而言之,P as NAME 将与 P 匹配,成功后将设置 NAME = {匹配到的值} 。
  • case _ 中的 _ 被作为通配符,当未匹配到其它 case 时执行此分支。as 可以用在 case _
  • 如果没有 case 语句匹配成功,则不会执行任何分支。