0Pricing
Python Academy · 课时

匹配序列与映射

解构列表和字典

匹配序列与映射 是 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 反馈 — 无需本地设置。

此课程中的所有课时

  1. match 和 case 基础
  2. 匹配序列与映射
  3. 类模式
  4. 守卫与通配符
← 返回 Python Academy