51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 902|回复: 0
打印 上一主题 下一主题

[转贴] 在 Python 3.10 中使用“match...case”

[复制链接]
  • TA的每日心情
    擦汗
    昨天 09:05
  • 签到天数: 1048 天

    连续签到: 1 天

    [LV.10]测试总司令

    跳转到指定楼层
    1#
    发表于 2022-8-5 11:49:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    “match...case”语法类似于其他面向对象语言中的 switch 语句,它旨在使结构与 case 的匹配更容易。
      让我们开始.
      语法
      “match...case”语法如下:
    1. def greeting(message):
    2.   match message.split():
    3.   case ["hello"]:
    4.   print("this message says hello")
    5.   case ["hello", name]:
    6.   print("This message is a personal greeting to {name}")
    7.   case _:
    8.   print("The message didn’t match with anything")
    复制代码
    让我们通过语法来看看它是如何工作的。
      我们创建的函数接受一个名为 message 的参数。match 关键字接受一个对象来比较列出的案例。
      在我们的示例中,match 关键字接收一个字符串列表,这是 message.split() 操作的结果。为了进一步说明,假设我们这样调用函数:
    1. greeting("hello")
    复制代码
    该函数首先将这个字符串拆分为所有空格,并形成一个列表。对于上述输入,匹配运算符将使用 ["hello"] 列表。然后它将列表与每个案例进行比较。我们的第一个案例是:
    1.  case ["hello"]
    复制代码
    我们的输入与此完全匹配,因此代码在这种情况下继续执行。
      输出:
    1. this message says hello
    复制代码
    如果我们这样调用函数会怎样:greeting("hello George")?
      使用该输入,匹配运算符将使用 ["hello", "George"] 列表来比较所有案例。第一种情况,case“hello”,将不匹配,因为比较列表中有两个元素,而不是一个。
      结构匹配
      匹配运算符匹配给定的表达式的结构,因此,由于 case 表达式的长度,我们的第一个 case 不匹配,即使比较表达式与列表中的第一个元素匹配。
      第二种情况是 ["hello", name]。这就是我们的输入匹配的情况。如果你没有为 Python 提供一个文字值来匹配,它会将比较表达式中的任何值绑定到 case 表达式中的变量名。因此,在我们的示例中,name 将设置为 George。并且这种情况匹配(它有“hello”作为第一个元素,并且还有一个元素,它被绑定到 name),所以输出是:
    1.   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")中,输出将是:
    1.   The message didn’t match with anything
    复制代码
    高级用法
      “match...case”语法是一个非常强大的工具,可用于比较许多不同的表达式和值。如果像我们在上面的示例中那样比较列表,那么可以使用更多的匹配功能。
      在 case 表达式中,可以使用运算符将所有剩余元素放入变量中。例如:
    1. comparison_list = ["one", "two", "three"]
    2.   match comparison_list:
    3.     case [first]:
    4.         print("this is the first element: {first}")
    5.     case [first, *rest]:
    6.         print("This is the first: {first}, and this is the rest: {rest}")
    7.     case _:
    8.         print("Nothing was matched")
    复制代码
    在此代码段中,第二种情况将匹配并执行,输出为:
    1. This is the first: one, and this is the rest: ["two", "three"]
    复制代码
    还可以从两个或多个结构中组合案例分支,如下所示:
    1. match comparisonList:
    2.      case [first] | [first, "two", "seven"]:
    3.          print("this is the first element: {first}")
    4.      case [title, "hello"] | ["hello", title]:
    5.          print("Welcome esteemed guest {title}")
    6.      case [first, *rest]:
    7.          print("This is the first: {first}, and this is the rest: {rest}")
    8.      case _:
    9.          print("Nothing was matched")
    复制代码
    第一种和第二种情况由几个不同的表达式组成,比较表达式可以适合这些表达式以运行 case 分支。这提供了一些灵活性来组合分支。
      我们还将介绍字典的“match...case”语法。匹配运算符将检查比较表达式是否包含 case 表达式中的属性。例如:
    1. comparisonDictionary = {
    2.      "John": "boy",
    3.      "Jack": "boy",
    4.      "Jill": "girl",
    5.      "Taylor": "girl"
    6.   }
    7.   match comparisonDictionary:
    8.      case {"John": "boy", "Taylor": "boy"}:
    9.          print("John and Taylor are both boys")
    10.      case {"John": "boy", "Taylor": "girl"}:
    11.          print("Taylor is a girl and John is a boy")
    12.      case _:
    13.          print("Nothing matches")
    复制代码
    输出:
    1. Taylor is a girl and John is a boy
    复制代码
    match 运算符将检查输入字典中是否存在 case 属性,然后检查值是否匹配。
      总之,新的“match...case”运算符是 Python 开发人员在创建分支案例时可以利用的强大工具。有了它,你可以可靠地检查任何传入变量的结构,并确保你不会尝试访问变量上不存在的内容。
      重要在字典匹配中,即使输入字典的属性多于 case 指定的属性,case 仍将匹配。
      总之,新的“match...case”运算符是 Python 开发人员在创建分支案例时可以利用的强大工具。有了它,可以可靠地检查任何传入变量的结构,并确保不会尝试访问变量上不存在的内容。








    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-19 00:39 , Processed in 0.063028 second(s), 24 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表