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

📅 2026/8/27 10:21:03
Python 3.10 中使用“match...case”
采用“match...case”语法, 其是跟其他面向对象语言里的语句相类似的, 该语法的目的在于让结构同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)让我们通过语法来看看它是如何工作的。经由我们所创建的函数, 会接纳一个名为 的参数, match 关键字会接纳一个对象用以对列出的案例展开比较。在咱们所举的示例里头, match关键字接纳了一个字符串列表, 此乃.split()操作产生的结果。为了能更进一步作出说明, 假定我们以这样的方式去调用函数:greeting(hello)该函数会先把这个字符串依照所有空格予以拆分, 进而形成一个列表。针对上述输入而言, 匹配运算符会运用列表。随后它会拿列表与每个案例展开比较。我们的第一个案例是:case [hello]我们的输入与此完全匹配因此代码在这种情况下继续执行。输出this message says hello如果我们这样调用函数会怎样(hello )使用该输入匹配运算符将使用hello, 列出表来用以比较全部案例, 第一种情形, case是“hello”, 这将不会匹配, 缘由在于比较列表之中存在两个元素, 并非一个。结构匹配匹配运算符, 它匹配给定表达式的结构, 所以, 鉴于 case 表达式的长度, 我们的第一个 case 未匹配, 即便比较表达式和列表里的第一个元素相匹配。第二种情况是hello, name。这便是我们输入匹配的情形。要是你未曾为其提供一个文字值用以匹配, 那它会把比较表达式里的任何值绑定至 case 表达式中的变量名。故而, 在我们的示例里, name 会被设置成。而且这种情形匹配它以“hello”作为首个元素, 并且存在另一个元素, 该元素被绑定到 name, 所以输出是:This message is a personal greeting to George现在让我们尝试像这样调用函数(hello )。比较表达式变为hello, , 此刻, 就让我们去瞧瞧每一个案例。第一种情形是失败的, 缘由在于比较表达式里存在着3个元素, 并非是1个。第二种情形是以相同地方式失败的第二种情形期望见到一个长度为2的列表, 在这个列表里, 第一个元素是“hello”。第一个元素实际上确是“hello”, 然而比较表达式有3个元素, 所以这个情形并不匹配。法语写作助手拥有法语助手这背景的AI智能写作平台, 具备语法自动纠错功能, 也有拼写自动纠错功能, 还能够一键改写你的法语作文, 同时还能一键润色你的法语作文。下载另外剩下的那仅有的选项是下划线的大小写, 这是那种默认的会匹配全部内容的大小写, 将它想象成语句里的默认情形, 要是比较表达式和其他任何别的内容都不相符, 它就会一直和下划线大小写情况相匹配。下划线段作为最后一种情境, 在这种情境里的任何情形下无一会去实施运行, 缘由在于全部情形都会跟下划线段情境相契合, 这跟 if...else 当中的 else 关键字相类似。下划线不管大写小写均能匹配全部事情, 因为会把下划线认定为有效的变量名称。所以恰似我们去匹配情形。hello, name在那个时候, 用于比较的表达式会被绑定到, 那个_符号后跟的_name之上。在我们所处的独特情形之下, 那个_变数会留存值。hello, , 所以, 在我们最新的, 函数调用“hello ”里, 输出将会是: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 boymatch运算符会去检查, 输入字典内里是不是存在case属性, 之后再去检查, 值是不是匹配。总之, 新的那个“match...case”运算符, 是开发人员于创建分支案例之际能够加以利用的强大工具, 借助它, 你能够可靠地去检查任何传入变量的结构, 并且要确保自己不会尝试去访问变量上并不存在的内容。在字典匹配这件事情当中起到重要作用的是, 哪怕输入字典所具备的属性数量比 case 所指定的属性数量还要多, case 依旧会实现匹配。总之, 新的“match...case”运算符, 是开发人员的强大工具, 在创建分支案例时能够加以利用。借助它, 可以对任何传入变量的结构进行可靠检查, 并且能确保不会去尝试访问变量上不存在的内容。