在 Python 3.10 中使用“match…case”

在 Python 3.10 中使用“match...case”

“match…case”语法类似于其他面向对象语言中的 switch 语句,它旨在使结构与 case 的匹配更容易。

让我们开始.

语法

“match…case”语法如下:

def greeting(message):match message.split():case ["hello"]:print("this message says hello")case ["hello", name]:print("This message is a personal greeting to {name}")case _:print("The message didn’t match with anything")

登录后复制

让我们通过语法来看看它是如何工作的。

我们创建的函数接受一个名为 message 的参数。match 关键字接受一个对象来比较列出的案例。

在我们的示例中,match 关键字接收一个字符串列表,这是 message.split() 操作的结果。为了进一步说明,假设我们这样调用函数:

greeting("hello")

登录后复制

该函数首先将这个字符串拆分为所有空格,并形成一个列表。对于上述输入,匹配运算符将使用 [“hello”] 列表。然后它将列表与每个案例进行比较。我们的第一个案例是:

case ["hello"]

登录后复制

我们的输入与此完全匹配,因此代码在这种情况下继续执行。

输出:

this message says hello

登录后复制

如果我们这样调用函数会怎样:greeting(“hello George”)?

使用该输入,匹配运算符将使用 [“hello”, “George”] 列表来比较所有案例。第一种情况,case“hello”,将不匹配,因为比较列表中有两个元素,而不是一个。

结构匹配

匹配运算符匹配给定的表达式的结构,因此,由于 case 表达式的长度,我们的第一个 case 不匹配,即使比较表达式与列表中的第一个元素匹配。

第二种情况是 [“hello”, name]。这就是我们的输入匹配的情况。如果你没有为 Python 提供一个文字值来匹配,它会将比较表达式中的任何值绑定到 case 表达式中的变量名。因此,在我们的示例中,name 将设置为 George。并且这种情况匹配(它有“hello”作为第一个元素,并且还有一个元素,它被绑定到 name),所以输出是:

This message is a personal greeting to George

登录后复制

现在让我们尝试像这样调用函数:greeting(“hello George Johnson”)。

比较表达式变为 [“hello”, “George”, “Johnson”]。现在让我们来看看每个案例。第一种情况失败,因为比较表达式中有 3 个元素,而不是 1。第二种情况以同样的方式失败;第二种情况期望看到一个长度为 2 的列表,其中第一个元素是“hello”。第一个元素其实是“hello”,但是比较表达式有3个元素,所以这个case不匹配。

剩下的唯一选项是下划线大小写,这是默认的匹配所有内容的大小写。把它想象成 switch 语句中的默认情况。如果比较表达式与其他任何内容都不匹配,它将始终与 _ 情况匹配。

下划线作为最后一种情况这种情况下的任何情况都不会运行,因为所有情况都将与下划线情况匹配。这类似于 if…else 中的 else 关键字。_ 大小写匹配所有内容,因为 Python 将 _ 识别为有效的变量名。所以就像我们匹配 case [“hello”, name] 时,比较表达式将绑定到 _ name。在我们的特定情况下,_ 变量将保存值 [“hello”, “George”, “Johnson”]。

所以在我们最新的函数调用greeting(“hello George Johnson”)中,输出将是:

The message didn’t match with anything

登录后复制

高级用法

“match…case”语法是一个非常强大的工具,可用于比较许多不同的表达式和值。如果像我们在上面的示例中那样比较列表,那么可以使用更多的匹配功能。

在 case 表达式中,可以使用运算符将所有剩余元素放入变量中。例如:

comparison_list = ["one", "two", "three"]match comparison_list:case [first]:print("this is the first element: {first}")case [first, *rest]:print("This is the first: {first}, and this is the rest: {rest}")case _:print("Nothing was matched")

登录后复制

在此代码段中,第二种情况将匹配并执行,输出为:

This is the first: one, and this is the rest: ["two", "three"]

登录后复制

还可以从两个或多个结构中组合案例分支,如下所示:

match comparisonList: case [first] | [first, "two", "seven"]: print("this is the first element: {first}") case [title, "hello"] | ["hello", title]: print("Welcome esteemed guest {title}") case [first, *rest]: print("This is the first: {first}, and this is the rest: {rest}") case _: print("Nothing was matched")

登录后复制

第一种和第二种情况由几个不同的表达式组成,比较表达式可以适合这些表达式以运行 case 分支。这提供了一些灵活性来组合分支。

我们还将介绍字典的“match…case”语法。匹配运算符将检查比较表达式是否包含 case 表达式中的属性。例如:

comparisonDictionary = { "John": "boy", "Jack": "boy", "Jill": "girl", "Taylor": "girl"}match comparisonDictionary: case {"John": "boy", "Taylor": "boy"}: print("John and Taylor are both boys") case {"John": "boy", "Taylor": "girl"}: print("Taylor is a girl and John is a boy") case _: print("Nothing matches")

登录后复制

输出:

Taylor is a girl and John is a boy

登录后复制

match 运算符将检查输入字典中是否存在 case 属性,然后检查值是否匹配。

总之,新的“match…case”运算符是 Python 开发人员在创建分支案例时可以利用的强大工具。有了它,你可以可靠地检查任何传入变量的结构,并确保你不会尝试访问变量上不存在的内容。

重要在字典匹配中,即使输入字典的属性多于 case 指定的属性,case 仍将匹配。

总之,新的“match…case”运算符是 Python 开发人员在创建分支案例时可以利用的强大工具。有了它,可以可靠地检查任何传入变量的结构,并确保不会尝试访问变量上不存在的内容。

以上就是在 Python 3.10 中使用“match…case”的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2242451.html

(0)
上一篇 2025年2月26日 20:57:08
下一篇 2025年2月19日 21:58:09

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • Python 切割 mp3 片段为每 30 秒一个并降低文件码率

    MoviePy是一个基于Python的视频编辑库,它提供了创建、编辑、合并、剪辑和转换视频的功能。以下是MoviePy的主要作用: 视频剪辑:MoviePy可以剪辑视频、分离视频和音频流、添加和删除视频和音频段等。 视频合并:MoviePy…

    编程技术 2025年2月26日
    200
  • 聊一聊Python 实现数据的序列化操作

    ​在日常开发中,对数据进行序列化和反序列化是常见的数据操作,Python提供了两个模块方便开发者实现数据的序列化操作,即 json 模块和 pickle 模块。这两个模块主要区别如下: json 是一个文本序列化格式,而 pickle 是一…

    2025年2月26日
    200
  • 用 ChatGPT 运行 Python

    最近,我一直在阅读一些关于ChatGPT的有趣文章。在一篇文章中,有人发明了一种新的语言,并让ChatGPT运行它。在另一篇文章中,有人在ChatGPT中运行一个虚拟机。后者启发我提出了下面这个问题。 你能在ChatGPT中运行一个交互式P…

    2025年2月26日
    200
  • 如何让 Python 脚本在工作日运行?

    你好,我是征哥,最近用 Python 写了个每日签到答题的脚本,想让它在工作日每天运行,于是我找到了这个三方库-chinesecalendar。 chinesecalendar 可以用来判断某年某月某一天是不是工作日/节假日。支持 2004…

    2025年2月26日
    200
  • 2022年你要掌握的十个Python优质库

    编程语言里面的Python提供了一些令人惊叹的功能,如易于学习和理解,增强的安全性和性能。它包括模块 , 包装,和函数库 ,因此 在保持项目的有序性和为不同的过程提供动力方面都起着重要的作用。模块是包含以. py扩展名保存的函数的pytho…

    2025年2月26日
    200
  • 学习Python,常用的这22个库怎能不掌握?

    如今全球各个行业内 Python 的使用状况怎么样呢? 这个问题就是我写这篇文章的初衷。我找出了22个最常用的 Python 包,希望能给你一些启发。 首先我列出了最近一年内 PyPI 上下载量最高的 Python 包。我们来看看这些包的作…

    2025年2月26日 编程技术
    200
  • 用Python做一个房价预测小工具!

    哈喽,大家好。 这是一个房价预测的案例,来源于 Kaggle 网站,是很多算法初学者的第一道竞赛题目。 该案例有着解机器学习问题的完整流程,包含EDA、特征工程、模型训练、模型融合等。 房价预测流程 下面跟着我,来学习一下该案例。 没有啰嗦…

    2025年2月26日 编程技术
    200
  • 使用 Python Pip 的十个技巧

    Python pip 让我们从 Python 语言开始。Python 之所以受欢迎,不仅因为它易于学习,还因为它拥有成千上万的(宝)库。 这些库相当于已经集成的工具,只要安装了就可以在 Python 中使用。它们可以处理各种各样的问题,而无…

    2025年2月26日
    200
  • 一文弄懂 Gunicorn 与 Python GIL

    什么是 Python GIL,它是如何工作的,以及它如何影响 gunicorn。 生产环境我应该选择哪种 Gunicorn worker类型? Python 有一个全局锁 (GIL),它只允许一个线程运行(即解释字节码)。在我看来,如果你想…

    2025年2月26日 编程技术
    200
  • 2023年优秀编程语言趋势

    对于开发人员和软件工程师来说,选择更优秀的编程语言使编写可以在任何地方运行的软件变得更加容易,工作效率更高。从 Java 的缓慢衰落到 MATLAB 的惊人流行,对当今最流行的编程语言的分析,可以帮助你了解最新趋势并响应最新趋势。 Pyth…

    2025年2月26日
    100

发表回复

登录后才能评论