Python 3.10+Условный операторконструкция
match / case
pattern matching
Сопоставление с образцом (Python 3.10+): значение сравнивается с литералами, типами и структурами; case _ ловит всё остальное.
Синтаксис
match subject:
case pattern1: ...
case pattern2 if guard: ...
case _: ...
Главная ловушка: одиночное имя в case — это не сравнение с переменной, а захват: оно всегда совпадает и связывает значение с этим именем. Чтобы сверять с константой, нужен литерал или имя через точку (например, Status.OK), иначе такой case перехватит вообще всё. Работает только с Python 3.10 и новее.
Примеры
match "quit":
case "quit": print("выход") # → выход
case "help": print("помощь") # не выполнится: сработал первый case
case _: print("неизвестно")
point = (0, 1)
match point:
case (0, 0): print("начало")
case (0, y): print(f"ось Y, y={y}") # → ось Y, y=1
case (x, y) if x == y: print("диагональ")
case _: print("общий")
match 42:
case int(n) if n > 10: print(f"большое {n}") # → большое 42
case _: print("другое")
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности