千家信息网

如何深入理解最新Python中的Match Case

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,如何深入理解最新Python中的Match Case,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。有些人仍然认为 Python 不需要"
千家信息网最后更新 2026年11月03日如何深入理解最新Python中的Match Case

如何深入理解最新Python中的Match Case,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

有些人仍然认为 Python 不需要"switch-case"语法。 甚至 Guido 本人也不支持在 Python 中添加这种语法。但是,为什么它仍然在这个新版本中发布? 在我看来,原因可以从名称中找到,它被称为"match case"而不是像大多数编程语言那样的"switch case"。

我将使用 7 个示例来演示新语法的灵活性和"pythonic"。

1. 基础

在任何花哨的东西之前,让我们从这种新语法的基本用例开始。假设我们正在编写一些代码来将 HTTP 状态代码转换为错误消息,我们可以使用 match-case 语法如下:

事实上,对于这个特定的例子,match-case 没有比 if-else 语法带来任何好处,如下所示。

def http_error(status):    if status == 400:        return "Bad request"    elif status == 401:        return "Unauthorized"    elif status == 403:        return "Forbidden"    elif status == 404:        return "Not found"    else:        return "Unknown status code"

如果它只能做这样的事情,我认为它不会被添加。 让我们继续用更多的例子来看看它可以有多大的灵活性。

2. 默认情况

它的意思是类似于大多数其他语言中的 switch-case 语法,因此它必须具有"默认情况"。 当没有定义的 case 可以匹配时,将执行"default case"中的代码。

Python以其风格实现了这一要求。 它使用代表匿名变量的下划线"_"。 基本原理是匿名变量可以"匹配"任何东西。
让我们看看下面的例子。

在上面的代码中,我们添加了默认情况并显示"其他错误"。

3. 合并案例

如果有时我们有多个案例需要合并怎么办? 换句话说,这些是不同的情况,但我们处理它们的方式应该是相同的。

在 Python 中,我们可以使用管道"|" 将这些案例合并为一个案例。 它也被视为"或"关系。

在上面的代码中,我们将 401 和 403 错误都视为身份验证问题,因此我们可以将它们组合到匹配案例中。

4. 列表中的通配符

更有趣的事情来了。 假设我们正在使用 match-case 语法编写告警逻辑。它接受一个列表作为参数。 第一个元素是时间。 比如有"早上"、"下午"和"晚上",第二个元素是我们需要做的动作。

但是,我们可能希望告警提醒我们同时做多件事。 因此,我们希望在列表中传递多个动作,以便告警可以提醒我们将所有动作一一执行。
这是实现这种要求的代码。

在这个例子中,我们只有两种情况。 第一种情况不需要过多解释,因为它只是试图匹配单一动作的情况。 在第二种情况下,我们在变量"actions"前面放了一个星号,这样它就可以匹配列表中的一个或多个动作!

5. 子模式

有时,我们可能希望在模式中包含模式。 具体来说,我们希望匹配案例将流分类为特定的"案例"。 但是,在该模式中,我们想要添加更多限制。

还记得我们已经定义了一天中的"时间"必须是"早上"、"下午"或"晚上"吗? 让我们将此限制添加到匹配案例代码中。 如果"时间"与这 3 项中的一项不匹配,则告诉用户该时间无效。

在上面的代码中,它表明我们可以使用一对括号将我们想要匹配的"模式"括起来,并使用管道来分隔这些模式。
如果它不匹配给定的 3 个"时间"之一,则将执行默认情况。

为什么那里有一个问号? 我故意添加它是因为我想强调解决方案。 通常,匹配子模式之一然后引用它完全匹配的模式并不容易。 但是,我们可以在 Python 中拥有这个"参考"。

让我们添加一个"as"关键字,后跟一个变量,这个变量将作为引用。

6. 条件模式

我们需要让这个告警更加"智能"。 到了晚上,让我们显示一些消息来感谢用户完成一天的工作。因此,我们在上面的代码中又添加了一个 case 来只匹配"evening"。

让我们让这个警报更加智能,以鼓励用户"工作与生活平衡"。 因此,当用户晚上想工作或学习时,闹钟会建议用户休息一下。

7. 匹配对象

到目前为止,我们已经探索了很多, 我猜你可能有这样的感觉,它是"match-case"而不是"switch-case",因为"pattern"永远是关键。

让我们有一个更复杂的例子。 是的,让我们使用 match-case 来匹配一个对象。

我编一个简单的用例。 创建了一个名为"Direction"的类,用于保持水平(东或西)和垂直(北或南)轴上的方向。

class Direction:    def __init__(self, horizontal=None, vertical=None):        self.horizontal = horizontal        self.vertical = vertical

现在,我们要使用 match-case 语法来匹配来自此类的实例并根据属性显示一条消息。

def direction(loc):    match loc:        case Direction(horizontal='east', vertical='north'):            print('You towards northeast')        case Direction(horizontal='east', vertical='south'):            print('You towards southeast')        case Direction(horizontal='west', vertical='north'):            print('You towards northwest')        case Direction(horizontal='west', vertical='south'):            print('You towards southwest')        case Direction(horizontal=None):            print(f'You towards {loc.vertical}')        case Direction(vertical=None):            print(f'You towards {loc.horizontal}')        case _:            print('Invalid Direction')

然后,让我们从类中创建一些对象进行测试。

d1 = Direction('east', 'south')d2 = Direction(vertical='north')d3 = Direction('centre', 'centre')

结果表明,match-case 可以根据这些对象的属性轻松匹配这些对象!

我介绍了 Python 3.10 中引入的新语法"match-case",以及它是多么灵活和强大。我相信掌握这种新语法将有助于我们在可读性方面编写更好的代码。

看完上述内容,你们掌握如何深入理解最新Python中的Match Case的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!

语法 代码 情况 模式 案例 例子 动作 变量 对象 时间 用户 面的 更多 多个 消息 错误 问题 工作 东西 事情 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 南京欣网互联网络科技 科技服务与互联网 互联网 的科技创新 未来的互联网科技 奇酷互联网络科技公司 玖二柒互联网科技公司待遇 隆华科技工业互联网 宁波青枫互联网科技有限公司 中国的互联网科技企业的崛起 河南猎农互联网科技有限公司 互联网科技公司有风险吗 哈尔滨屹滨互联网科技有限公司 本届互联网博览会上的黑科技 区块链结合互联网科技 山东星卡互联网科技有限公司官网 九思连强互联网电子科技有限公司 求路客互联网科技电话 美国五大互联网科技公司市值多少 互联网金融金融科技 银川新华互联网科技学校招聘 科技创新与互联网经济 科技互联网公司装修 互联网科技有限公司 翻译 互联网科技大会案例 中国最先进互联网科技公司 海南科技产业互联网平台 重庆威客帮互联网科技 速维有品互联网信息科技(苏州)有限公司 工业互联网山东科技大学 世界互联网科技成果奖
0