Python 3.10+astпонятие
ast.MatchStar
сопоставление с образцом
Образец *name внутри последовательности в case: забирает остаток элементов списком; у *_ поле name равно None.
Синтаксис
ast.MatchStar(name)
Встречается только внутри MatchSequence и не больше одного раза на образец. Захваченный остаток — всегда list, даже если сопоставлялся кортеж. '*_' пропускает элементы без привязки имени: name=None, и переменная _ не создаётся. Двойная звёздочка в словарном образце — не MatchStar, а поле rest у MatchMapping.
Примеры
import ast
p = ast.parse('match x:\n case [h, *t]: pass\n case [*_]: pass').body[0]
print([q.name for q in p.cases[0].pattern.patterns]) # → ['h', 't']
print(p.cases[1].pattern.patterns[0].name) # → None
match (1, 2, 3):
case (first, *rest):
print(first, rest) # → 1 [2, 3]
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности