25 分钟
Python 进阶

match/case 模式匹配(Python 3.10+)

结构化模式匹配,能代替冗长的 if-elif 链。

  • 理解 match/case 的基本语法
  • 掌握字面量、变量、通配符模式
  • 学会序列和映射模式
  • 了解类模式和守卫条件

什么是模式匹配?

Python 3.10 有了 match/case 语句。它不是其他语言的 switch,能匹配数据的结构,不只是值。说白了就是,按数据的形状选要跑的代码段。

示例代码(可运行)
ℹ️case _ 是通配符

_ 匹配任何值,相当于 if-elif 链最后的 else。如果没有匹配且没有 case _,会直接跳过整个 match 块,不报错。

匹配多种值

一个 case 可以用 | 匹配多个值:

示例代码(可运行)

变量绑定与守卫

case 里的变量会自动绑上匹配到的值。还能加 if 守卫条件:

示例代码(可运行)

解构序列(列表/元组)

match 可以直接拆开列表和元组,这是最强大的用法之一:

示例代码(可运行)
示例代码(可运行)

解构字典

示例代码(可运行)
💡什么时候用 match/case?

需要根据值的多个可能性做不同处理,尤其是嵌套数据结构(API 响应、AST、命令解析)时,用 match/case 比 if-elif 清楚。简单二选一用 if-else 就够,别硬套 match/case。

小测验

选择题

match/case 中 case _ 的作用是?

预测输出
x = [1,2]
match x:
    case [a,b]: print(a+b)
    case _: print(0)

资深工程师加餐

底层原理 · 大厂视角 · 工程经验,点卡片展开

内层函数(或 lambda)捕获的是外层变量本身,而不是定义那一刻的值;循环里定义的多个函数,循环结束后调用往往都拿到最后的值。解决办法是用默认参数 f(x=x) 立即绑定,或用工厂函数包一层。配合 LEGB 作用域顺序(局部→外层→全局→内建)理解,90% 的作用域谜题都能解开。

挑战任务

命令解析器

简单+50 XP

用 match/case 写个简单的命令解析函数,支持 add/delete/list/quit 命令。

命令解析器
3 个测试用例

课后作业

递归数据结构处理

中等+20 XP

用 match/case 处理嵌套的数学表达式树,比如 ('+', 1, ('*', 2, 3)) 这种,递归计算结果。

递归数据结构处理
1 个测试用例