Python 3.10+astпонятие
ast.Match
сопоставление с образцом
Узел инструкции match: subject — сопоставляемое выражение, cases — список узлов match_case с образцом, guard и телом.
Синтаксис
ast.Match(subject, cases)
Образцы в case — не выражения: они строятся из отдельной иерархии ast.pattern (MatchValue, MatchAs, MatchClass…), и обходчик, знающий только expr, их пропустит. Условие 'if' после образца лежит в match_case.guard обычным выражением. Слова match и case — мягкие ключевые: переменная match = 1 по-прежнему законна и даёт Assign.
Примеры
import ast
src = 'match cmd:\n case ["go", d] if d:\n pass\n case _:\n pass'
m = ast.parse(src).body[0]
print(type(m).__name__, m.subject.id, len(m.cases)) # → Match cmd 2
c = m.cases[0]
print(type(c.pattern).__name__, c.guard.id) # → MatchSequence d
print(type(ast.parse('match = 1').body[0]).__name__) # → Assign
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности