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