python match 变量比较?

作者站长头像
站长
· 阅读数 19
var1 = 2
var2 = 2
var3 = 2

# 可以运行
match var1:
    case '1':
        print(1)
    case var2:
        print(2)
# 2
# 会报
match var1:
    case '1':
        print(1)

    case var3:
        print(3)
    case var2:
        print(2)
# Syntax Error: name capture 'var3' makes remaining patterns unreachable (<input>, line 9
回复
1个回答
avatar
test
2024-07-10

case var3: 是一个 capture pattern ,不是 value pattern 。它不是比较 match 的值与 var3 是否相等,而是重新声明了一个 var3 ,把 var1 的值赋值给了它。所以它永远是成功的。

value pattern 要求中间一定要有一个 . ,比如 case httpStatus.OK:,这是才会用 == 比较值是否相等。

PEP635 里又一段关于为什么这样设计的讨论。

这里可以试一下 case x if x == var3:

注:case '1': 是 literal pattern ,不是 value pattern 。

回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容