您将后面的模式case
视为具有值的普通表达式,但它实际上是 Python 中一个全新的语法类别;它看起来像对象构造(即一些文字,或对构造函数的调用),但实际上恰恰相反,模式用于解构您尝试匹配的对象。
所以,这有效:
match x:
case 1:
print('one')
因为字面量1
专门表示int
值为 的1
。But(2 - 1)
是一个由两个字面整数、一个操作和用于分组的括号组成的表达式。Python 试图将其解释为一种模式,而解构复数的模式最接近。
例如:
n = 2 - 1j
match n:
# these parentheses aren't needed, but allowed;
# they're here to show what Python thought you were trying to do
case (2 - 1j):
print('this number')
case complex(real=r, imag=i):
print('some other complex number')
正如另一个答案中所指出的,如果您需要进一步限制您尝试匹配的值,您可以使用警卫:
def try_this(n):
match n:
case int(x) if x == (2 - 1):
print('what I want')
case int(x):
print('some other int')
try_this(1)
try_this(2)