match 和 case 基础
根据值模式进行分支
match 和 case 基础 是 CoddyKit 上的免费 Python Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Python Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Python Academy 课程共包含 4 节课。
结构化模式匹配
Python 3.10 通过 match 语句引入了结构化模式匹配。它会将一个值与一系列模式进行比较,并执行第一个匹配的模式,其功能远比连续使用 if/elif 强大。
基本语法
先写 match,后面跟上匹配对象,然后写一个或多个 case 分支。第一个匹配的分支会执行。
command = 'start'
match command:
case 'start':
print('Starting up')
case 'stop':
print('Shutting down')
# prints: Starting up匹配字面量
最简单的模式是字面量:数字、字符串、True、False 和 None。当匹配对象等于该字面量时,模式就会匹配。
code = 404
match code:
case 200:
print('OK')
case 404:
print('Not Found')
case 500:
print('Server Error')通配符 _
下划线 _ 是一个能匹配任何内容的通配模式。请将它放在最后作为兜底默认分支,类似于 else。
code = 418
match code:
case 200:
print('OK')
case _:
print('Unknown status')使用 OR 组合模式
在一个分支中使用 | 运算符,可以匹配多个模式中的任意一个。
code = 301
match code:
case 200 | 201 | 204:
print('Success')
case 301 | 302:
print('Redirect')
case _:
print('Other')捕获值
模式中的单独名称会将匹配对象捕获到该变量中。当您使用了兜底匹配但仍然需要这个值时,可以采用这种方式。
value = 42
match value:
case 0:
print('zero')
case other:
print('got', other)顺序很重要
分支会从上到下进行测试,第一个匹配的分支获胜。过早放置宽泛的捕获模式,会遮蔽后面更具体的分支。
x = 5
match x:
case n: # matches everything first!
print('caught by capture')
case 5:
print('this never runs')Match 不返回任何内容
match 是语句而不是表达式,因此不会返回值。如果需要结果,请在分支内部设置变量。
day = 6
label = ''
match day:
case 0 | 6:
label = 'weekend'
case _:
label = 'weekday'
print(label)匹配 None
您可以直接匹配 None。这比在条件链中明确进行 is None 检查更简洁。
def describe(value):
match value:
case None:
return 'nothing'
case _:
return 'something: ' + str(value)
print(describe(None))
print(describe(7))实用的分派器
模式匹配非常适合用作命令分派器,可以将冗长的条件链转换为清晰的分支表。
def handle(cmd):
match cmd:
case 'help':
return 'Showing help'
case 'quit' | 'exit':
return 'Goodbye'
case _:
return 'Unknown command'
print(handle('exit'))
print(handle('foo'))匹配 True、False 和 None
常量 True、False 和 None 按身份而不是按相等性进行匹配。因此,根据它们进行分支判断时非常可靠。
def report(flag):
match flag:
case True:
return 'enabled'
case False:
return 'disabled'
case None:
return 'unset'
print(report(True))
print(report(None))快速检查
通配模式 _ 在 match 语句中有什么作用?
回顾
您学会了根据值模式进行分支。
match会从上到下测试各个分支;第一个匹配的分支获胜。- 匹配字面量,使用
_作为兜底模式,并使用|进行组合。 - 单独的名称会捕获值。
match是语句而不是表达式。
常见问题解答
「match 和 case 基础」课时是免费的吗?
是的 — 「match 和 case 基础」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Python Academy 课程的其余内容,请升级到 CoddyKit PRO。 Python Academy 课程共包含 4 节课。
「match 和 case 基础」这节课中我会学到什么?
根据值模式进行分支 你通过在浏览器中直接运行的动手代码来练习 Python Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Python Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Python Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。
「match 和 case 基础」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Python Academy 课中编写并运行代码吗?
能。每节 Python Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。