Привет, я использовал недавно добавленную функцию совпадения регистров, но столкнулся с этой проблемой.
Вот мой код:
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":
, ошибки исчезают. Что случилось?
2 ответа
Вы не можете использовать произвольные выражения в качестве шаблонов (поскольку иногда это может быть неоднозначно), только определенное подмножество.
Если вы хотите сопоставить элементы списка, вам, вероятно, следует, в зависимости от ситуации, либо сделать их отдельными переменными, либо использовать list.index
.
Это связано с тем, что оператор match
case
предназначен для структурного сопоставления. В частности, PEP 635 говорит:
Хотя на первый взгляд шаблоны могут выглядеть как выражения, важно помнить о четком различии. На самом деле ни один шаблон не является выражением и не содержит его. Более продуктивно думать о шаблонах как о декларативных элементах, подобных формальным параметрам в определении функции.
В частности, простые переменные используются как шаблоны захвата, а не как шаблоны сопоставления - определенно не то, что мог бы ожидать программист C/C++... - и функции или индексы или просто не разрешены.
С практической точки зрения в качестве шаблонов соответствия могут использоваться только буквенные или точечные выражения.
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.