match/case 模式匹配(Python 3.10+)
结构化模式匹配,能代替冗长的 if-elif 链。
- 理解 match/case 的基本语法
- 掌握字面量、变量、通配符模式
- 学会序列和映射模式
- 了解类模式和守卫条件
什么是模式匹配?
Python 3.10 有了 match/case 语句。它不是其他语言的 switch,能匹配数据的结构,不只是值。说白了就是,按数据的形状选要跑的代码段。
_ 匹配任何值,相当于 if-elif 链最后的 else。如果没有匹配且没有 case _,会直接跳过整个 match 块,不报错。
匹配多种值
一个 case 可以用 | 匹配多个值:
变量绑定与守卫
case 里的变量会自动绑上匹配到的值。还能加 if 守卫条件:
解构序列(列表/元组)
match 可以直接拆开列表和元组,这是最强大的用法之一:
解构字典
需要根据值的多个可能性做不同处理,尤其是嵌套数据结构(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% 的作用域谜题都能解开。
挑战任务
命令解析器
用 match/case 写个简单的命令解析函数,支持 add/delete/list/quit 命令。
课后作业
递归数据结构处理
用 match/case 处理嵌套的数学表达式树,比如 ('+', 1, ('*', 2, 3)) 这种,递归计算结果。