python流程控制-匹配语句match

match 是 Python 3.10 引入的结构化模式匹配语句,类似于其他语言中的 switch-case,但功能更强大。

1. 基本语法

python

复制代码
match 表达式:
    case 模式1:
        代码块1
    case 模式2:
        代码块2
    case _:
        默认代码块(类似于 else).

注意:

  • _ 表示当所有模式都未匹配成功,则执行该模式下的代码块,本质上_是一个变量,用来匹配任意值。在一个匹配语句中,只能出现一个能匹配任意数据的变量。

2. 基本使用示例

简单值匹配

复制代码
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 = 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("无效的状态码")

3. 匹配模式绑定变量

在提供匹配值时,除可以提供字面值外,还可以提供变量,用来匹配任意值,如 _,但是在一个匹配语句中,只能出现一个独立的匹配变量。

在编写程序过程中,如果需要动态匹配部分数据,比如一个元组中的部分值,此时可以通过绑定变量的方式,提供一个字面值和变量的混合匹配模式,字面值用来精确匹配,变量用来模糊匹配。

示例:输入一个坐标,输出该坐标点的位置。

复制代码
# 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
相关推荐
AC赳赳老秦7 分钟前
用 OpenClaw 搭建服务器故障应急响应系统,自动处理 80% 常见运维故障
android·运维·服务器·python·rxjava·deepseek·openclaw
2601_9547064913 分钟前
云手机技术详解+Python实战调用|2026高稳云手机平台推荐
开发语言·python·智能手机
chushiyunen14 分钟前
java中的路径处理、左右斜杠
java·开发语言·python
jay神40 分钟前
基于 FastAPI + Vue 的宠物领养管理系统
前端·vue.js·python·毕业设计·fastapi·宠物
重生之后端学习1 小时前
Java入门
java·开发语言·职场和发展
碧海蓝天20221 小时前
C++法则24:在标准 C++ 中,没有任何可移植的方式判断指针 T* pt 指向的内存位置是否已经 构造了对象,程序员必须手动跟踪哪些元素已构造。
java·开发语言·c++
代码不加糖1 小时前
Proxy能够监听到对象中的对象的引用吗?
开发语言·前端·javascript
charlie1145141911 小时前
现代C++指南:Lambda,让我们用另一种方式持有函数
开发语言·c++
程序员小远1 小时前
自动化测试基础知识总结
自动化测试·软件测试·python·selenium·测试工具·职场和发展·测试用例
GEO优化小助手1 小时前
2026临沂GEO优化公司实测解析:3家本土机构适配性参考
大数据·人工智能·python