Сопоставление последовательностей и отображений
Деструктурируйте списки и словари
«Сопоставление последовательностей и отображений» — бесплатный урок 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 — локальная установка не требуется.
Все уроки этого курса
- Основы match и case
- Сопоставление последовательностей и отображений
- Шаблоны классов
- Защитные условия и подстановочные шаблоны