Python 3.10+astпонятие
ast.match_case
сопоставление с образцом
Узел одной ветки case в инструкции match. Поля: pattern — образец, guard — условие после if или None, body — список инструкций. С 3.10.
Синтаксис
ast.match_case(pattern, guard=None, body)
Условие case x if x > 0 хранится в guard отдельно от образца, а образец — pattern, а не выражение. У match_case нет своих lineno/col_offset: позицию ветки берут у pattern или первой инструкции body. Ветки лежат в Match.cases по порядку, и порядок значим — первая совпавшая побеждает.
Примеры
import ast
src = 'match n:\n case x if x > 0:\n pass\n case 0:\n pass'
for case in ast.parse(src).body[0].cases:
guard = ast.unparse(case.guard) if case.guard else None
print(type(case.pattern).__name__, guard) # → MatchAs x > 0 / MatchValue None
print(hasattr(case, 'lineno')) # → False
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности