Python 3.10+astпонятие
ast.pattern
сопоставление с образцом
Абстрактный базовый класс образцов в match/case: MatchValue, MatchAs, MatchClass, MatchSequence и других. Поле pattern у match_case. С 3.10.
Синтаксис
isinstance(case.pattern, ast.pattern)
Образцы — не выражения: case [x, y] даёт MatchSequence, а не List, и case x — MatchAs с захватом имени, а не Name. Поэтому поиск ast.Name по коду с match не найдёт переменных, которые связываются образцом. Шаблон-подстановка _ — MatchAs с name=None и pattern=None.
Примеры
import ast
src = 'match p:\n case [x, y]:\n pass\n case _:\n pass'
for case in ast.parse(src).body[0].cases:
pat = case.pattern
print(type(pat).__name__, isinstance(pat, ast.pattern))
# → MatchSequence True / MatchAs True
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности