我想通过匹配变量中存储的输入来实现匹配/大小写。
预期的逻辑应该是这样的:
match x:
case y:
print(...)
case z:
print(...)
事实证明这个方法行不通。
它会导致此错误:“仅最后一个 case 语句才允许不可反驳的模式”,
我相信会发生这种情况,因为不知何故,第一个 case 旁边的变量被分配给下一个匹配的变量的值:如果我去调试,通过“case y”行,y 的值更改为 x 中存储的值。
但是,如果一切都属于一个类,则不会发生这种情况,如下所示:
class Vars:
x = int(input())
y = int(input())
z = int(input())
match Vars.x:
case Vars.y:
print("something")
case Vars.z:
print("anything")
这种方法不会导致任何错误。
这是为什么?
我的意思是,是什么让类变量成为可反驳的模式?
我发现新的match
命令(正式名称:结构模式匹配)是相当复杂的事情。花了 3 个 PEP 来记录和解释这个新的 Python 功能(PEP-634 规格, 第635章 理由 and 第636章 教程).
我认为自己是这个话题的新手,但想回答这个问题。那么,为什么case y:
不工作并且case Vars.y:
工作得很好吗?
case y:
并不意味着“与y
正如人们所预料的那样。它是一种“捕获模式”,这意味着它总是匹配任何内容并将其存储到变量中y
.
Python 调用始终匹配的模式“无可辩驳”并有一些特殊的规则。简而言之:任何无可辩驳的模式都必须是最后一个(这是问题中提到的错误的根源。)但正如我所解释的,即使纠正了这个错误,它也无法工作。
另一方面,case Vars.y
是一种“价值模式”;这个点就很重要。顾名思义,它的意思是“与这个值比较”。
还有许多其他图案类型。综上所述,仅凭直觉很难理解匹配规则。我并不是指一些晦涩的细节。推荐一个很好的教程(例如 PEP-636)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)