Python 大小写匹配显示错误,列表元素作为大小写。预期的 ”:”

Python match case shows error with list element as case. Expected ":"

您好,我在使用新添加的匹配大小写功能,但遇到了这个问题。

这是我的代码:

from typing import List

class Wee():
    def __init__(self) -> None:
        self.lololol: List[str] = ["car", "goes", "brrrr"]

    def func1(self):
        self.weee = input()
        try:
            match self.weee:
                case self.lololol[0]:
                    print(self.lololol[0])
                case self.lololol[1]:
                    print(self.lololol[1])
                case _:
                    print(self.lololol[2])
        except SyntaxError as e:
            print(e)

waa = Wee()
waa.func1()

在第 11 行和第 13 行,错误显示为 SyntaxError: expected ':'。但是,当我将 case self.lololol[0]: 更改为 case "car": 时,错误消失了。发生了什么事?

您不能使用任意表达式作为模式(因为那样有时会产生歧义),只能 a certain subset.

如果你想匹配列表的元素,你可能应该根据情况,将它们设为单独的变量,或者使用 list.index.

这是因为 match case 语句用于 结构 匹配。具体来说 PEP 635 说:

Although patterns might superficially look like expressions, it is important to keep in mind that there is a clear distinction. In fact, no pattern is or contains an expression. It is more productive to think of patterns as declarative elements similar to the formal parameters in a function definition.

具体来说,普通变量用作捕获模式而不是匹配模式 - 绝对 不是 C/C++ 程序员所期望的... - 和函数或下标或只是不允许。

从实用的角度来看,只能使用文字或点分表达式作为匹配模式。