“match...case”语法类似于其他面向对象语言中的switch语句,旨在使结构与case的匹配更加容易。让我们开始吧。语法“match...case”语法如下:defgreeting(message):matchmessage.split():case["hello"]:print("thismessagesayshello")case["hello",name]:print("Thismessageisapersonalgreetingto{name}")case_:print("Themessagedidn'tmatchwithanything")让我们来看看语法,看看它是如何工作的。我们创建的函数接受一个名为message的参数。match关键字接受一个对象来比较列出的案例。在我们的示例中,match关键字接收一个字符串列表,这是message.split()操作的结果。为了进一步说明,假设我们这样调用该函数:greeting("hello")该函数首先将这个字符串在所有空格上拆分并形成一个列表。对于上述输入,匹配运算符将使用["hello"]列表。然后它将列表与每个案例进行比较。我们的第一个案例是:case["hello"]我们的输入与此完全匹配,所以代码在这种情况下继续执行。输出:这条消息说你好如果我们这样调用这个函数会怎样:greeting("helloGeorge")?使用该输入,匹配运算符将使用["hello","George"]列表来比较所有情况。第一种情况,case"hello",不会匹配,因为比较列表中有两个元素,而不是一个。结构匹配匹配运算符匹配给定表达式的结构,因此,由于case表达式的长度,我们的第一个case不匹配,即使比较表达式匹配列表中的第一个元素。第二种情况是["hello",name]。这就是我们的输入匹配方式。如果您不为Python提供要匹配的文字值,它会将比较表达式中的任何值绑定到case表达式中的变量名。因此,在我们的示例中,名称将设置为George。并且这种情况匹配(它有“hello”作为第一个元素,还有一个元素,它绑定到名称),所以输出是:ThismessageisapersonalgreetingtoGeorge现在让我们尝试像这样调用它函数:问候语(“你好乔治约翰逊”)。比较表达式变为["hello","George","Johnson"]。现在让我们看看每个案例。第一种情况失败,因为比较表达式中有3个元素,而不是1。第二种情况以同样的方式失败;第二种情况希望看到长度为2的列表,其中第一个元素是“hello”。第一个元素实际上是“hello”,但是比较表达式有3个元素,所以这种情况不匹配。剩下的唯一选项是下划线大小写,这是匹配所有内容的默认大小写。将其视为switch语句中的默认情况。如果比较表达式不匹配任何其他内容,它将始终匹配_的情况。下划线作为最后一个案例这种情况下的任何案例都不会运行,因为所有案例都将匹配下划线案例。这类似于if...else中的else关键字。_case匹配所有内容,因为Python将_识别为有效的变量名。所以就像当我们匹配case["hello",name]时,比较表达式将绑定到_name。在我们的特定情况下,_变量将保存值["hello","George","Johnson"]。所以在我们最新的函数调用greeting("helloGeorgeJohnson")中,输出将是:Themessagedidn'tmatchwithanything值。如果您像我们在上面的示例中所做的那样比较列表,则可以使用更多匹配函数。在case表达式中,运算符可用于将所有剩余元素放入变量中。例如:comparison_list=["one","two","three"]matchcomparison_list:case[first]:print("thisisthefirstelement:{first}")case[first,*rest]:print("Thisisthefirst:{first},andthisisrest:{rest}")case_:print("Nothingwasmatched")在这段代码中,将匹配并执行第二种情况,输出为:Thisisthefirst:one,andthisisrest:["two","three"]还可以组合来自两个或多个结构的case分支,如下所示:matchcomparisonList:case[first]|[first,"two","seven"]:print("thisisthefirstelement:{first}")case[title,"hello"]|["hello",title]:print("欢迎尊敬的客人{title}")case[first,*rest]:print("这是第一个:{first},这是其余的:{rest}")case_:print("Nothingwasmatched")firstandsecond一个案例由几个不同的表达式组成,比较表达式可以适用于运行案例分支。这为组合分支提供了一些灵活性。我们还将介绍字典的“匹配...大小写”语法。匹配运算符将检查比较表达式是否包含case表达式中的属性。例如:comparisonDictionary={"John":"boy","Jack":"boy","Jill":"girl","Taylor":"girl"}matchcomparisonDictionary:case{"John":"boy","Taylor":"boy"}:print("John和Taylor都是男孩")case{"John":"boy","Taylor":"girl"}:print("Taylor是女孩,John是aboy")case_:print("Nothingmatches")输出:TaylorisagirlandJohnisaboy匹配运算符会检查输入字典中是否存在case属性,然后检查值是否匹配。总之,新的“匹配...案例”运算符是Python开发人员在创建分支案例时可以利用的强大工具。有了它,您可以可靠地检查任何传入变量的结构,并确保您不会尝试访问变量上不存在的内容。重要在字典匹配中,即使输入字典的属性多于case指定的属性,case仍然会匹配。总之,新的“匹配...案例”运算符是Python开发人员在创建分支案例时可以利用的强大工具。有了它,可以可靠地检查任何传入变量的结构,并确保不会尝试访问变量上不存在的内容。
