Python 3.10+astпонятие
ast.MatchOr
сопоставление с образцом
Образец-альтернатива case 1 | 2 | 3: patterns — список вариантов; совпадает первый подошедший слева направо.
Синтаксис
ast.MatchOr(patterns)
Все альтернативы обязаны связывать одинаковый набор имён: 'case [x] | (x, _)' законно, а 'case [x] | 1' — SyntaxError, причём от компилятора: ast.parse такое дерево строит без возражений. Знак | здесь не побитовое ИЛИ: BinOp(BitOr) внутри case не появляется, и 'case A | B' по классам Enum работает через MatchValue внутри MatchOr.
Примеры
import ast
p = ast.parse('match c:\n case 1 | 2 | 3: pass').body[0].cases[0].pattern
print(type(p).__name__, [q.value.value for q in p.patterns]) # → MatchOr [1, 2, 3]
import ast
try:
compile(ast.parse('match v:\n case [x] | 1: pass'), '<m>', 'exec')
except SyntaxError as e:
print(type(e).__name__) # → SyntaxError
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности