0Pricing
Python Academy · Урок

Защитные условия и подстановочные шаблоны

Добавляйте условия и универсальные варианты

«Защитные условия и подстановочные шаблоны» — бесплатный урок 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 — локальная установка не требуется.

Все уроки этого курса

  1. Основы match и case
  2. Сопоставление последовательностей и отображений
  3. Шаблоны классов
  4. Защитные условия и подстановочные шаблоны
← Назад к Python Academy