Защитные условия и подстановочные шаблоны
Добавляйте условия и универсальные варианты
«Защитные условия и подстановочные шаблоны» — бесплатный урок Python Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Python Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Python Academy содержит 4 уроков всего.
Уточнение сопоставления
Иногда структурного шаблона недостаточно: нужно также проверить условие. Условия добавляют проверку if к варианту, а подстановочные шаблоны дают гибкие варианты по умолчанию.
Добавление условия
Запишите if <condition> после шаблона. Вариант подходит только тогда, когда совпал шаблон и истинно условие.
n = 7
match n:
case x if x < 0:
print('negative')
case x if x == 0:
print('zero')
case x if x > 0:
print('positive')Условия используют захваченные имена
Условие может обращаться к переменным, связанным шаблоном. Здесь захваченная пара проверяется на равенство.
point = [3, 3]
match point:
case [x, y] if x == y:
print('on the diagonal')
case [x, y]:
print('off the diagonal')Если условие ложно
Если структура совпала, но условие ложно, сопоставление продолжается со следующим вариантом, а не останавливается.
value = 5
match value:
case n if n > 100:
print('big')
case n:
print('fell through to here:', n)Условия с шаблонами классов
Условия сочетаются с любым типом шаблона, включая шаблоны классов, и позволяют точно задавать требования к атрибутам объектов.
from dataclasses import dataclass
@dataclass
class Order:
total: float
def discount(order):
match order:
case Order(total=t) if t > 100:
return 'free shipping'
case Order():
return 'standard shipping'
print(discount(Order(150)))
print(discount(Order(50)))Итоги о подстановочном шаблоне
Один символ подчёркивания _ подходит ко всему и ничего не связывает. В качестве последнего варианта он обрабатывает всё, что не подошло раньше.
x = 'unexpected'
match x:
case 'a':
print('letter a')
case _:
print('catch-all')Захват и подстановочный шаблон
Именованный захват тоже подходит ко всему, но сохраняет значение, тогда как _ отбрасывает его. Используйте имя, если значение понадобится в теле варианта.
value = 42
match value:
case 0:
print('zero')
case other: # capture: keeps the value
print('value was', other)Подстановочные шаблоны внутри шаблонов
Символ подчёркивания можно помещать внутрь более крупных шаблонов, чтобы игнорировать ненужные части.
record = ('user', 42, 'ignore_me')
match record:
case ('user', user_id, _):
print('user id:', user_id)Сочетание OR, условий и подстановочных шаблонов
Эти возможности сочетаются. Шаблон OR, затем условие и завершающий подстановочный шаблон образуют выразительный классификатор.
def classify(n):
match n:
case 0 | 1:
return 'binary digit'
case x if x % 2 == 0:
return 'even'
case _:
return 'odd'
print(classify(0))
print(classify(4))
print(classify(7))Полнота сопоставления
В отличие от некоторых языков, Python не требует, чтобы сопоставление охватывало все случаи. Если ни один вариант не подходит, инструкция просто ничего не делает. Добавьте финальный case _, если хотите гарантировать выполнение ветви.
color = 'purple'
result = 'no match'
match color:
case 'red':
result = 'stop'
case 'green':
result = 'go'
print(result)Условия для деструктурированных данных
Условия естественно сочетаются с шаблонами последовательностей и отображений, позволяя проверить только что извлечённые значения.
data = [10, 20]
match data:
case [a, b] if a + b > 25:
print('sum is large')
case [a, b]:
print('sum is small')Быстрая проверка
Что происходит, если шаблон структурно подходит, но его условие ложно?
Итоги
Вы научились добавлять условия и варианты по умолчанию.
- Условия добавляют проверку
if, которая может использовать захваченные имена. - Если условие ложно, выполняется следующий вариант.
_сопоставляется и отбрасывает значение; имя захватывает его.- Добавьте финальный
case _для гарантированного выполнения ветви.
Часто задаваемые вопросы
Урок «Защитные условия и подстановочные шаблоны» бесплатный?
Да — полный текст урока «Защитные условия и подстановочные шаблоны» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Python Academy, подпишись на CoddyKit PRO. Курс Python Academy содержит 4 уроков всего.
Чему я научусь в уроке «Защитные условия и подстановочные шаблоны»?
Добавляйте условия и универсальные варианты Ты практикуешь Python Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Python Academy?
Предыдущий опыт не требуется. Python Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.
Сколько времени занимает урок «Защитные условия и подстановочные шаблоны»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Python Academy?
Да. Каждый урок Python Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Основы match и case
- Сопоставление последовательностей и отображений
- Шаблоны классов
- Защитные условия и подстановочные шаблоны