匹配序列与映射
解构列表和字典
匹配序列与映射 是 CoddyKit 上的免费 Python Academy 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Python Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Python Academy 课程共包含 4 节课。
可以解构的模式
match 的真正强大之处在于解构。序列模式和映射模式可以让您检查数据的结构,同时提取其中的值。
匹配固定长度的列表
方括号中的序列模式会匹配长度完全相同的列表或元组,并将每个元素绑定到一个名称。
point = [3, 4]
match point:
case [x, y]:
print('x =', x, 'y =', y)长度必须匹配
包含两个元素的模式不会匹配包含三个元素的序列。每个分支都会同时检查结构和长度。
data = [1, 2, 3]
match data:
case [a, b]:
print('pair')
case [a, b, c]:
print('triple:', a, b, c)混合字面量与捕获
您可以将某些位置固定为字面量,同时捕获其他位置的值。这样只有以给定字面量开头的序列才会匹配。
command = ['move', 10, 20]
match command:
case ['move', dx, dy]:
print('moving by', dx, dy)
case ['stop']:
print('stopping')使用 * 捕获其余部分
带星号的名称会将所有剩余元素捕获为列表,作用与扩展解包很相似。
items = [1, 2, 3, 4, 5]
match items:
case [first, *rest]:
print('first:', first)
print('rest:', rest)空序列与单元素模式
序列模式可以简洁地处理边界情况:空列表、单个元素或多个元素。
def describe(seq):
match seq:
case []:
return 'empty'
case [x]:
return 'one: ' + str(x)
case [x, *rest]:
return 'many, first ' + str(x)
print(describe([]))
print(describe([9]))
print(describe([1, 2, 3]))匹配字典
映射模式使用花括号。它会检查给定的键是否存在,并绑定这些键对应的值。匹配对象中多出的键也是允许的。
event = {'type': 'click', 'x': 10, 'y': 20}
match event:
case {'type': 'click', 'x': x, 'y': y}:
print('click at', x, y)部分键匹配
映射模式只要求您列出的键存在。其他键会被忽略,这对于包含可选字段的消息非常有用。
event = {'type': 'key', 'code': 'A', 'extra': 1}
match event:
case {'type': 'key', 'code': code}:
print('key pressed:', code)捕获剩余键
使用 **rest 将所有未匹配的键值对捕获到一个字典中。
event = {'type': 'move', 'dx': 5, 'dy': 7}
match event:
case {'type': 'move', **rest}:
print('move details:', rest)嵌套模式
模式可以自由嵌套。您可以匹配包含列表的字典,同时解构这两层结构。
data = {'name': 'grid', 'size': [3, 4]}
match data:
case {'name': name, 'size': [w, h]}:
print(name, 'is', w, 'by', h)字符串在这里不是序列
序列模式特意不会匹配字符串或字节,即使它们是可迭代的。这样可以防止字符串被意外地逐字符解构。
value = 'hi'
match value:
case [a, b]:
print('matched as sequence')
case str():
print('matched as string')快速检查
当模式 [first, *rest] 与 [1, 2, 3, 4] 匹配时,会绑定什么?
回顾
您学会了解构列表和字典。
- 序列模式会检查长度并绑定元素。
*rest会捕获剩余的列表元素。- 映射模式会匹配键;多出的键也是允许的。
**rest会捕获剩余的字典键值对;模式可以嵌套。
常见问题解答
「匹配序列与映射」课时是免费的吗?
是的 — 「匹配序列与映射」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Python Academy 课程的其余内容,请升级到 CoddyKit PRO。 Python Academy 课程共包含 4 节课。
「匹配序列与映射」这节课中我会学到什么?
解构列表和字典 你通过在浏览器中直接运行的动手代码来练习 Python Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Python Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Python Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。
「匹配序列与映射」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Python Academy 课中编写并运行代码吗?
能。每节 Python Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- match 和 case 基础
- 匹配序列与映射
- 类模式
- 守卫与通配符