0Pricing
Python Academy · 课时

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 反馈 — 无需本地设置。

此课程中的所有课时

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