Python中的切换案例?发现 MatchCase
Fonte: 不飞溅
很长一段时间以来,许多迁移到 Python 语言的程序员的疑问是对功能的支持 开关盒 ,在Java、C#和C++等语言中广为人知。直到 2021 年年中,Python 本身并没有类似的东西,但是,情况发生了变化,在新的 Python 更新中,在 3.10 版中,支持此功能——名称不同,但原理相同。在本文中,我们将发现 相符 , 的替代语法 如果别的 对于条件结构。
匹配案例语法
假设我们的开发团队必须为一家比萨店编写代码,我们的目标是返回三种最畅销的比萨口味的原料:葡萄牙、玛格丽塔和拿波利塔纳。为此,我们可以想到一个简单的条件结构 如果别的 , 如下所示:
在上面的代码中,我们总是重复这句话 风味==披萨名称
,这使得代码重复。当然,我们只进行了三个比较,但可能会有二十、三十、五十个案例,对于所有这些情况,我们都必须重复相同的比较,但是请注意,所有这些条件都大致相同场景,即比萨饼的味道,所以不针对每个条件重复场景会很有趣。现在见面, 相符 :
在代码中,没有必要重复类似的比较 风味==披萨名称
对于每个场景。相反, 相符 为代码添加了更多的优雅和简洁。
你的语法 工作方式如下:
- 这个单词 匹配 伴随着一个变量来评估其值。在这种情况下,我们定义将被评估的场景的上下文。
- 然后我们在下面定义每种情况( 案子 )我们期望:案例( 案子 ) 在 匹配 成为这个值,做这个。
返回默认值
但你一定在想:如果没有列出的案例怎么办?如何告诉火柴盒? Python 有一个简单但非常强大的特性,那就是 下划线:_ , 他的意思 任何 , 可以和指令一起使用 案子 定义如果不满足任何条件,则 标准值 .我们正在为其开发此代码的比萨店希望未注册比萨的默认值是 “不明成分” .适应代码,我们有:
为什么创建它?
到目前为止,我们已经看到 相符 非常类似于条件结构 如果别的
,但是,更优雅一点。但是,创建此资源的动机远不止于此,它旨在使代码更清晰、更易读、更符合函数式编程,并简化项目模式的实现,例如 游客 .按照 表现 ,在幕后,这个结构在运行时工作很像 如果别的
, 但不同之处在于它支持更复杂的条件的详细说明,当使用 如果别的
使代码更冗长,在极端情况下使用 代码气味 .
高级功能
除了使语法 如果别的 更具可读性, 相符 为我们提供了一系列可能性,我们可以将其用于:
- 类似案例
- 在列表中并使用通配符
- 模式和子模式捕获
- 在类对象中
类似案例
比萨店向我们的开发团队报告,Pizza Marguerita 也被很多客户称为 Margarida,并要求我们在代码中添加这个功能,即当客户说 Marguerita 或者 黛西,必须退回相同的成分。在某些情况下,其中 多次验证的返回值相同 ,我们可以将这些场景组合成一个 案子 通过性格 “|” (管道), 这意味着 或者 .下面是它在代码中的样子:
列表和通配符
比萨店要求的另一个功能是顾客可以选择他的比萨的配料,所以,如果说出顾客的姓名和配料,物品将被退回,以便他确认订单。使用 相符 ,我们可以使用一个列表来做这个检查,甚至可以使用星号通配符 (*) 拆开清单,因为披萨可以有一种或多种成分:
案例和条件
我们可以加入案例和 如果
为了寻找更复杂的检查,所以,回到客户列出比萨配料的场景,如果有,我们只会确认订单 “番茄” 在他要求的项目上,我们可以这样做:
类对象
让我们创建一个类来定义比萨不可缺少的成分是:
现在,让我们为 Pizza 类创建一些对象:
我们的 相符 类将如下所示:
使用哪种方法:Ifs 还是 Match Case?
我知道你已经想到了答案,如果你想到 “要看” , 你是对的。但让我们超越 “要看” .
您是否同意在编程中有几种方法可以达到结果?但是最好的方法是什么?
这取决于我们,程序员,而不是捍卫一种方法,要知道 什么是正确使用的工具 什么时候是最好的时间。就好像我们有一个行李箱,里面有几件衣服可以在旅行中使用,但是如果我们要去海滩,就不适合从行李箱中脱掉我们的保暖外套。在 Match Case 的情况下,它用于更复杂的结构,当使用多个结构时 如果别的
,代码往往很复杂,不可读。做简单的比较,比如比萨店,继续保持我们的好老头没关系 如果别的
.最后,它总是取决于具体情况,取决于你必须解决它的场景,但评估可能性并担心你编写的代码总是好的,为此,重要的是了解新功能,它们的
结论
我们在本文中了解了匹配案例语法、动机和复杂用例。希望你喜欢这篇文章。感谢您阅读到这里!下次见。
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明
本文链接:https://www.qanswer.top/35134/17531400
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/289273.html