匹配语句 match
匹配语句-match
简介
在 Python 中,match
是 Python3.10 版本引入的一种模式匹配语法。
它提供了一种简洁而强大的方式来匹配和处理不同模式的逻辑,当成功匹配一个模式时,就执行该模式后的代码块。
match
语句适用于有限的精准值的匹配,不适用于范围值的判断。
基本语法结构
match
语法的基本结构如下:
match value:
case pattern1:
# 处理 pattern1 匹配成功的情况
case pattern2:
# 处理 pattern2 匹配成功的情况
...
case patternN:
# 处理 patternN 匹配成功的情况
case _:
# 处理所有其他情况的匹配(相当于默认情况)
match
表示匹配模式的开始value
表示需要进行匹配的目标值case
表示提供一个匹配模式pattern
表示被匹配的值,该值一般为一个字面量值。-
表示当所有模式都未匹配成功,则执行该模式下的代码块,本质上-
是一个变量,用来匹配任意值。
示例: 根据输入 httpCode
值不同,输出对应的描述
httpCode = int(input("请输入一个HTTP状态码:"))
match httpCode:
case 101:
print("临时响应")
case 200:
print("请求成功")
case 301:
print("重定向")
case 404:
print("页面找不到")
case 500:
print("服务器内部错误")
case _:
print("无效的状态码")
|
组合多个匹配值
match
可以在一个匹配模式中,提供多个匹配值,使用 |
组合,在匹配时,只要成功匹配其中一个值即可。
示例: 改进 HTTPCode
示例,可以匹配不同级别中的更多状态码
httpCode = int(input("请输入一个HTTP状态码:"))
match httpCode:
case 100 | 101:
print("临时响应")
case 200 | 201 | 203 | 204 | 205:
print("请求成功")
case 301 | 304 | 307:
print("重定向")
case 401 | 403| 404 | 405:
print("页面找不到")
case 500 | 502 | 503:
print("服务器内部错误")
case _:
print("无效的状态码")
匹配模式绑定变量
在提供匹配值时,除可以提供字面值外,还可以提供变量,用来匹配任意值,如 _
,但是在一个匹配语句中,只能出现一个独立的匹配变量。
在编写程序过程中,如果需要动态匹配部分数据,比如一个元组中的部分值,此时可以通过绑定变量的方式,提供一个字面值和变量的混合匹配模式,字面值用来精确匹配,变量用来模糊匹配。
示例:输入一个坐标,输出该坐标点的位置。
# point is an (x, y) tuple
x = int(input("x:"))
y = int(input("y:"))
point = (x, y)
match point:
case (0, 0):
print("坐标在原点上")
case (0, y):
print(f"坐标在Y轴上")
case (x, 0):
print(f"坐标在X轴上")
case (x, y):
print(f"X={x}, Y={y}")
case _:
raise ValueError("没有这个坐标点")
上面代码中:
- 第一个模式有两个字面值,这两个字面值都能精确匹配者能成功匹配当前模式。
- 第二,三两个模式结合了一个字面值和一个变量,而变量绑定了一个来自目标的值
point
,此时,字面值需要精确匹配,而绑定的变量可以匹配该位置的任意值。 - 第四个模式捕获了两个值,此时,目标值中的任意值都会被成功匹配。
- 这使得它在概念上类似于解包赋值
(x, y) = point
。