Python Glossary English

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