大家刚学Python的时候,大概率都写过这样的代码:
op = "+"
if op == "+":
print("加法")
elif op == "-":
print("减法")
elif op == "*":
print("乘法")
elif op == "/":
print("除法")
else:
print("未知操作")
刚开始还好。
可一旦判断条件越来越多,代码就会变成这样:
if...
elif...
elif...
elif...
elif...
elif...
elif...
写着累。
看着更累。
Python开发团队显然也意识到了这个问题。
所以从Python 3.10开始,官方推出了一个全新的语法:
match-case
很多开发者第一次看到它时,都有同一个感受:
这不就是Python版的“智能分流器”吗?
今天这篇文章,我们就用最简单的大白话,把match-case一次讲透。
看完你就知道:
什么是模式匹配?
先想象一个场景。
你来到机场安检口。
工作人员会根据你的情况把你分到不同通道:
工作人员不会问一大堆问题。
他只需要看你的信息是否符合某个模板。
符合哪个模板,就进入哪个通道。
这就是模式匹配。
简单来说:
模式匹配就是拿数据和预先设计好的模板进行比对,然后自动执行对应操作。
而match-case,就是Python实现模式匹配的工具。
它最大的作用有两个:
第一:数据分流
不同数据走不同路线。
例如:
+
-
*
/
分别执行不同运算。
第二:匹配数据内容和结构
不仅能看值是什么。
还能看数据长什么样。
也就是说:
它不只是判断内容。
还能判断数据结构。
这也是它比传统if更强大的地方。
match-case基础语法详解
先看最基本的结构:
match 数据:
case 模式1:
执行代码
case 模式2:
执行代码
case _:
默认处理
别急着害怕。
其实就五个核心知识点。
1、数据入口:match
match就像安检口入口。
所有数据都从这里进入。
例如:
match op:
这里的op就是等待匹配的数据。
程序会拿它去和后面的case逐个比较。
找到符合条件的那一个。
然后执行对应代码。
2、匹配模式:case
case就是一个个检查窗口。
例如:
case "+":
意思是:
如果数据等于"+"。
那就执行这里的代码。
再比如:
case "-":
数据等于"-"时执行。
程序会从上往下依次检查。
谁匹配成功。
就执行谁。
3、组合匹配:|
有时候多个情况需要同样处理。
这时可以使用:
|
它的意思很简单:
或者。
例如:
case "+" | "-":
翻译成人话:
如果是加法或者减法。
都进入这里。
是不是比写两个case省事多了?
4、条件守卫(Guard)
这是match-case最厉害的功能之一。
写法:
case 模式 if 条件:
注意这里的:
if 条件
它就像门口保安。
先匹配成功。
然后再检查一次额外条件。
只有条件也满足。
才允许进入。
所以被称为:
条件守卫(Guard)
5、通配符_(默认兜底)
最后这个非常重要。
写法:
case _:
下划线:
_
可以理解成:
“其他所有情况”。
前面都匹配不上时。
最终会进入这里。
它相当于if语句里的:
else
专门负责收尾工作。
避免程序漏掉特殊情况。
实战案例:简易安全计算器
光看语法不过瘾。
来看PDF里的经典案例。
通过match-case实现一个简单计算器。
完整代码
operator = "/"
a = 20
b = 0
match operator:
case "+":
print(a + b)
case "-":
print(a - b)
case "*":
print(a * b)
case "/"if b != 0:
print(a / b)
case "/":
print("错误:除数不能为0")
case _:
print("不支持的运算符")
运行效果演示
当前数据:
a = 20
b = 0
operator = "/"
程序输出:
错误:除数不能为0
为什么这样设计?
很多新手都会踩一个坑。
例如:
20 / 0
程序直接报错。
因为数学里:
0不能作为除数。
所以这里使用了条件守卫。
第一层匹配:
case "/"
发现是除法。
进入下一步。
第二层检查:
if b != 0
看看除数是不是0。
如果不是:
正常计算。
如果是:
直接提示错误。
这样程序就不会崩溃。
这就是条件守卫最大的价值:
提前拦截危险情况。
进阶用法一:条件守卫
再来回顾一下:
case "/"if b != 0:
可以拆成两步理解。
第一步:
case "/"
先确认是不是除法。
第二步:
if b != 0
再确认除数是否合法。
只有两项都满足。
才会执行:
print(a / b)
所以:
条件守卫特别适合处理:
进阶用法二:默认兜底
计算器还有一种情况。
如果用户输入:
%
怎么办?
前面所有case都匹配不到。
这时:
case _:
就会出场。
输出:
不支持的运算符
这就是默认兜底。
它最大的作用就是:
永远给程序留条后路。
避免出现无法处理的情况。
match-case和if到底有什么区别?
很多同学学完后会问:
那以后是不是不用if了?
答案:
不是。
它们各有优势。
一句话总结
如果你面对的是:
+
-
*
/
这种固定选项。
优先使用:
match-case
代码更整洁。
阅读更舒服。
如果你面对的是:
成绩 > 90
年龄 < 18
余额 >= 1000
这种范围判断。
还是使用:
if
最合适。
今天我们认识了Python 3.10新增的重要语法:
match-case模式匹配。
记住两个核心原则:
✅ 确定结构、固定值匹配,用match-case
✅ 复杂逻辑、范围判断,用if语句
同时别忘了两个关键功能:
最后提醒一句:
⚠️ match-case仅支持Python 3.10及以上版本。
如果你的Python版本过低。
运行时会直接报语法错误。
升级到Python 3.10+之后,再来体验这个让代码瞬间清爽的新语法吧!