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
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 。