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Сообщить о неточности