二、match 模式匹配学习笔记
2026-02-19
Python基础
type
Post
status
Published
date
Feb 19, 2026
slug
python-match-pattern-notes-2
summary
屎山用多了用用这个也不错, Python 3.10 出的 match-case,让分支判断可以写得这么优雅!简直就是再次伟大了了起来.就像是从用钥匙开锁变成了用指纹解锁——功能一样,但体验完全不同!
tags
Python的逻辑处理
category
Python基础
icon
password
💡 学习感悟:屎山用多了用用这个也不错, Python 3.10 出的 match-case,让分支判断可以写得这么优雅!简直就是再次伟大了了起来.就像是从用钥匙开锁变成了用指纹解锁——功能一样,但体验完全不同!
1. 为什么需要 match 语句?
我的理解
在没有 match 语句之前,如果要处理多分支判断,我只能写一堆 if-elif:
这样写虽然能工作,但当分支很多时,代码会显得冗长,而且充满了
== 比较运算符。match-case 的出现解决了这个问题——它提供了一种更直观、更 Pythonic 的多分支选择方式。
📝 我的理解:match-case 就像是分类整理箱——每个 case 是一个箱子,match 的值会自动找到对应的箱子,不需要你一个个去比较。
2. match-case 基本语法
2.1 基本结构
语法要点
match后面跟要匹配的表达式
case后面跟要匹配的模式
- 使用
_作为通配符,匹配任何值(相当于 default)
- 每个
case代码块需要缩进
2.2 简单示例
📝 我的理解:match-case 的执行就像是查字典——你给出 key(match 的值),它会自动找到对应的 value(case 代码块)执行,不需要你一个个去比对。
2.3 match-case 执行流程图
流程说明:
- 首先计算
match后面表达式的值
- 从上到下依次检查每个
case的模式
- 如果某个
case的模式匹配成功,执行该case的代码块,然后跳出match语句
- 如果所有
case都不匹配,执行case _的代码块(通配符匹配)
3. 模式类型
3.1 字面量模式(Literal Patterns)
匹配具体的值,如数字、字符串、布尔值等。
字面量模式匹配流程图:
📝 我的理解:字面量模式就是精确匹配——值必须完全一样才会匹配成功。这适合处理枚举值、状态码等固定值。
3.2 变量模式(Variable Patterns)
将匹配的值绑定到变量,供后续使用。
变量模式匹配流程图:
📝 我的理解:变量模式就像是拍照留证——不仅匹配成功,还把匹配的值 capture(捕获)到变量里,后面可以拿出来用。配合守卫子句(if 条件),可以实现更灵活的判断。
3.3 通配符模式(Wildcard Pattern)
使用
_ 匹配任何值,通常用于默认情况。通配符模式匹配流程图:
📝 我的理解:_就像是万能钥匙——什么锁都能开,但你不会关心这把锁长什么样(不绑定值)。通常放在最后作为默认处理。
4. 实际应用案例
4.1 简易计算器
📝 我的理解:这个计算器用 match-case 比 if-elif 清晰多了!每个运算符对应一个 case,一眼就能看明白逻辑。而且用_处理非法运算符也很方便。
4.2 成绩等级评定
📝 我的理解:成绩评定用变量模式 + 守卫子句特别合适!捕获分数到变量 n,然后用 if 条件判断等级。比写一堆elif score >= 90:要优雅。
4.3 季节判断
📝 我的理解:用|匹配多个值是 match-case 的一大亮点!case 3 | 4 | 5:表示"3 或 4 或 5",比写elif month == 3 or month == 4 or month == 5:简洁太多了。
5. match vs if-elif:我该怎么选?
5.1 什么时候使用 match?
场景 | 推荐 | 原因 |
简单的值比较 | if-elif | 更简洁 |
多个分支判断 | match | 更清晰 |
需要捕获值 | match | 更方便 |
匹配多个值 | match | 使用 | 更优雅 |
5.2 对比示例
📝 我的理解:if-elif 就像是逐一询问,而 match-case 就像是自动分类。分支越多,match-case 的优势越明显。
6. 遇到的问题和解决
6.1 Python 版本要求
⚠️ 踩坑记录:我第一次想用 match-case 的时候,程序报错了!后来才发现我的 Python 版本是 3.9,不支持这个特性。match-case 需要 Python 3.10+,用之前先检查一下版本。
6.2 匹配顺序很重要
⚠️ 踩坑记录:match-case 是从上到下匹配的,第一个匹配的 case 会执行,然后直接跳出。所以要把具体的匹配放在前面,通用的放在后面。如果把case 200 | 201放在case 200前面,那case 200就永远不会执行了!
6.3 不要忘记通配符
⚠️ 踩坑记录:我曾经写了一个 match-case,但是忘记加case _,结果当值不匹配任何 case 时,程序抛出了MatchError!所以建议总是加上通配符作为默认处理。
7. 核心知识点整理
7.1 match-case 的基本形式
7.2 模式类型
- 字面量模式:匹配具体值(数字、字符串、布尔值)
- 变量模式:将匹配的值绑定到变量,配合守卫子句使用
- 通配符模式:使用
_匹配任何值,作为默认处理
7.3 守卫子句
7.4 多值匹配
7.5 注意事项
- 需要 Python 3.10+
- 匹配是从上到下的,第一个匹配的 case 会执行
- 匹配成功后自动跳出,不需要 break
- 建议总是加上
case _作为默认处理
7.6 match vs if-elif 选择
- match:多分支、需要捕获值、匹配多个值
- if-elif:简单条件判断、复杂逻辑表达式
课后练习
- 编写程序,使用 match-case 实现一个简单的菜单系统,根据用户输入执行不同操作
- 编写程序,使用 match-case 判断一个字符是元音、辅音还是其他字符
- 编写程序,使用 match-case 和守卫子句判断一个年份是否为闰年
- 编写程序,使用 match-case 实现石头剪刀布游戏的胜负判断
- 编写程序,使用 match-case 将数字 1-12 转换为对应的英文月份名称
Loading...
