0Pricing
Python Academy · Урок

Сопоставление последовательностей и отображений

Деструктурируйте списки и словари

«Сопоставление последовательностей и отображений» — бесплатный урок Python Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Python Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Python Academy содержит 4 уроков всего.

Шаблоны с деструктуризацией

Настоящая сила match — в деструктуризации. Шаблоны последовательностей и отображений позволяют одновременно проверить структуру данных и извлечь значения.

Сопоставление со списком фиксированной длины

Шаблон последовательности в квадратных скобках сопоставляется со списком или кортежем точно такой же длины, связывая каждый элемент с именем.

point = [3, 4]

match point:
    case [x, y]:
        print('x =', x, 'y =', y)

Длина должна совпадать

Шаблон из двух элементов не подходит к последовательности из трёх элементов. Каждый вариант проверяет и структуру, и длину.

data = [1, 2, 3]

match data:
    case [a, b]:
        print('pair')
    case [a, b, c]:
        print('triple:', a, b, c)

Сочетание литералов и захвата

Некоторые позиции можно зафиксировать литералами, а остальные захватить. Такой шаблон подходит только последовательностям, начинающимся с указанного литерала.

command = ['move', 10, 20]

match command:
    case ['move', dx, dy]:
        print('moving by', dx, dy)
    case ['stop']:
        print('stopping')

Захват остатка с помощью *

Имя со звёздочкой захватывает все оставшиеся элементы в виде списка, подобно расширенной распаковке.

items = [1, 2, 3, 4, 5]

match items:
    case [first, *rest]:
        print('first:', first)
        print('rest:', rest)

Пустые шаблоны и шаблоны из одного элемента

Шаблоны последовательностей аккуратно обрабатывают крайние случаи: пустой список, один элемент или множество элементов.

def describe(seq):
    match seq:
        case []:
            return 'empty'
        case [x]:
            return 'one: ' + str(x)
        case [x, *rest]:
            return 'many, first ' + str(x)

print(describe([]))
print(describe([9]))
print(describe([1, 2, 3]))

Сопоставление со словарями

Шаблон отображения использует фигурные скобки. Он проверяет наличие указанных ключей и связывает с ними соответствующие значения. Дополнительные ключи в проверяемом значении разрешены.

event = {'type': 'click', 'x': 10, 'y': 20}

match event:
    case {'type': 'click', 'x': x, 'y': y}:
        print('click at', x, y)

Частичное сопоставление ключей

Шаблон отображения требует только перечисленные вами ключи. Остальные ключи игнорируются, что особенно удобно для сообщений с необязательными полями.

event = {'type': 'key', 'code': 'A', 'extra': 1}

match event:
    case {'type': 'key', 'code': code}:
        print('key pressed:', code)

Захват оставшихся ключей

Используйте **rest, чтобы захватить все несопоставленные пары ключ-значение в словарь.

event = {'type': 'move', 'dx': 5, 'dy': 7}

match event:
    case {'type': 'move', **rest}:
        print('move details:', rest)

Вложенные шаблоны

Шаблоны можно свободно вкладывать друг в друга. Можно сопоставить словарь, содержащий список, и одновременно деструктурировать оба значения.

data = {'name': 'grid', 'size': [3, 4]}

match data:
    case {'name': name, 'size': [w, h]}:
        print(name, 'is', w, 'by', h)

Здесь строки не являются последовательностями

Шаблоны последовательностей намеренно не сопоставляются со строками или байтовыми последовательностями, хотя по ним можно выполнять итерацию. Это не позволяет случайно деструктурировать строку посимвольно.

value = 'hi'

match value:
    case [a, b]:
        print('matched as sequence')
    case str():
        print('matched as string')

Быстрая проверка

Что связывает шаблон [first, *rest] при сопоставлении с [1, 2, 3, 4]?

Итоги

Вы научились деструктурировать списки и словари.

  • Шаблоны последовательностей проверяют длину и связывают элементы.
  • *rest захватывает оставшиеся элементы списка.
  • Шаблоны отображений сопоставляют ключи; дополнительные ключи разрешены.
  • **rest захватывает оставшиеся пары словаря; шаблоны можно вкладывать.

Часто задаваемые вопросы

Урок «Сопоставление последовательностей и отображений» бесплатный?

Да — полный текст урока «Сопоставление последовательностей и отображений» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Python Academy, подпишись на CoddyKit PRO. Курс Python Academy содержит 4 уроков всего.

Чему я научусь в уроке «Сопоставление последовательностей и отображений»?

Деструктурируйте списки и словари Ты практикуешь Python Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Python Academy?

Предыдущий опыт не требуется. Python Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.

Сколько времени занимает урок «Сопоставление последовательностей и отображений»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Python Academy?

Да. Каждый урок Python Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

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

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