Объяснение к уроку
После этого урока ты сможешь:
case._.|.Инструкция match в Python полезна, когда значение может принимать одну из нескольких известных форм или команд. Она похожа на switch в других языках, но в Python называется структурным сопоставлением с образцом.
match command:
case "start":
print("Starting")
case "stop":
print("Stopping")
case _:
print("Unknown command")Python проверяет варианты сверху вниз и выполняет первый совпавший вариант. Проваливания (fall-through) нет, поэтому тебе не нужно добавлять break после каждой ветки.
Используй |, когда несколько литеральных значений должны приводить к одному результату. Страж добавляет условие if после шаблона, когда одного совпадения значения недостаточно.
Для простых пороговых проверок вроде score >= 90 обычный if / elif / else остаётся более наглядным. В этом уроке мы сосредоточимся на литеральной маршрутизации, альтернативах, запасных вариантах и одном случае со стражем — без сложных шаблонов последовательностей или объектов.
Каждый литеральный вариант обрабатывает одну известную команду.
command = "pause"
match command:
case "start":
print("Worker: starting")
case "pause":
print("Worker: paused")
case _:
print("Worker: unsupported")Вывод:
Worker: pausedВыполняется только первый совпавший вариант.
Шаблон _ обрабатывает значения, которые не были указаны явно.
export_format = "xml"
match export_format:
case "csv":
print("Exporter: CSV")
case "json":
print("Exporter: JSON")
case _:
print("Exporter: unavailable")Вывод:
Exporter: unavailableПодстановочный знак должен находиться после конкретных вариантов.
Используй |, когда несколько шаблонов ведут к одной ветке.
method = "HEAD"
match method:
case "GET" | "HEAD":
print("Request: read")
case "POST" | "PUT":
print("Request: write")
case _:
print("Request: unsupported")Вывод:
Request: readВетка выполняется, если подошёл любой из литералов.
Страж уточняет совпавший вариант дополнительным условием.
event_type = "payment"
amount = 1250
match event_type:
case "payment" if amount >= 1000:
print("Payment: manual review")
case "payment":
print("Payment: automatic")
case _:
print("Event: ignored")Вывод:
Payment: manual reviewВариант со стражем должен стоять перед более общим вариантом.
| Задача | Шаблон |
|---|---|
| Сопоставить один литерал | case "start": |
| Сопоставить любой из литералов | `case "GET" |
| Добавить дополнительное условие | case "payment" if amount > 0: |
| Обработать все остальные случаи | case _: |
break после каждого варианта; в Python нет сквозного перехода к следующему варианту.case _ перед конкретными вариантами.match для обычных числовых порогов, которые понятнее выражаются через if / elif.