二、match 模式匹配学习笔记

二、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 执行流程图

流程说明
  1. 首先计算 match 后面表达式的值
  1. 从上到下依次检查每个 case 的模式
  1. 如果某个 case 的模式匹配成功,执行该 case 的代码块,然后跳出 match 语句
  1. 如果所有 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:简单条件判断、复杂逻辑表达式

课后练习

  1. 编写程序,使用 match-case 实现一个简单的菜单系统,根据用户输入执行不同操作
  1. 编写程序,使用 match-case 判断一个字符是元音、辅音还是其他字符
  1. 编写程序,使用 match-case 和守卫子句判断一个年份是否为闰年
  1. 编写程序,使用 match-case 实现石头剪刀布游戏的胜负判断
  1. 编写程序,使用 match-case 将数字 1-12 转换为对应的英文月份名称
推荐云服务

雨云 - 云服务器首选

稳定 · 高速 · 性价比超高

使用优惠码立享折扣,开启你的云端之旅~

一元试用秒级开通24h在线客服

优惠码

zqf
立即访问
Loading...
灵心小窝

灵心小窝

这里不是一个喧闹的地方,只是用来存放一些还不想遗忘的东西。

声明 © 2026 早清风
加载中...