Hardmatchpython310

Что такое структурное сопоставление (match/case)?

1Постановка

Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.

2Решение

Structural pattern matching (Python 3.10, PEP 634) — switch/case-подобный синтаксис с мощными patterns. Аналог switch в Java 17+, Rust match, Scala.

match command:
    case 'quit':
        exit()
    case 'go' | 'move':          # OR
        move()
    case ['click', x, y]:        # sequence — destructuring
        click(x, y)
    case {'type': 'circle', 'radius': r}:   # mapping
        area = 3.14 * r ** 2
    case Point(x=0, y=0):        # class pattern
        print('origin')
    case Point(x=0, y=y):
        print(f'on Y axis at {y}')
    case x if x > 0:             # guard
        print(f'positive: {x}')
    case _:                      # wildcard (default)
        print('unknown')

Patterns:

  • literal (1, 'str'), capture (variable binds value), wildcard (_);
  • sequence ([x, y, *rest]), mapping ({'key': value});
  • class (Point(0, y=0) — использует __match_args__);
  • guard (case x if x > 0), as (case [1, 2] as pair).

Полезно для парсинга AST, обработки command responses, state machines.

3Как отвечать

  • Сначала уточните условия и ограничения, покажите аналитическое мышление.
  • Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
  • Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡

На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.