Python Glossary English

Python 3.10+astпонятие

ast.MatchAs

сопоставление с образцом

Образец-захват в case: голое имя (case x), подстановочный знак (case _) или образец с привязкой (case [a] as whole).

Синтаксис

ast.MatchAs(pattern=None, name=None)

Одним узлом записаны три разные вещи: 'case x' — pattern=None, name='x', совпадает с чем угодно; 'case _' — pattern=None, name=None; 'case [a] as w' — pattern задан, name='w'. Неотвратимый захват не последним в match — SyntaxError «makes remaining patterns unreachable» при compile(), хотя ast.parse его пропускает: так Python ловит 'case RED:' вместо 'case Color.RED:'.

Примеры

import ast
src = 'match v:\n    case [a] as w: pass\n    case x: pass'
cs = ast.parse(src).body[0].cases
print(type(cs[0].pattern.pattern).__name__, cs[0].pattern.name)  # → MatchSequence w
print(cs[1].pattern.pattern, cs[1].pattern.name)  # → None x
import ast
try:
    compile(ast.parse('match v:\n    case RED: pass\n    case 1: pass'), '<m>', 'exec')
except SyntaxError as e:
    print(type(e).__name__)  # → SyntaxError

См. также

Открыть в полном глоссарииdocs.python.orgСообщить о неточности