Этап 4 из 11 · ≈ 4 ч

Итераторы и генераторы

Основа с Junior

Протокол итерации, генераторы, yield from, comprehensions и ленивые вычисления.

Что важно знать

  • Итератор — __iter__ и __next__; генератор создаёт его через yield.
  • Генераторы ленивые и одноразовые.
  • itertools: islice, groupby, chain.

Критерии освоения

Junior ≈ 4 ч

  • Пишет генераторы и объясняет экономию памяти по сравнению со списком
  • Использует list и dict comprehension и генераторные выражения

Практика. Обработать файл на гигабайт генератором построчно с фильтрацией и агрегацией.

Middle ≈ 4 ч

  • Реализует протокол итератора и использует itertools
  • Объясняет send и yield from

Практика. Построить конвейер обработки логов из генераторов с itertools.

Проверка знаний

Войдите, чтобы пройти тест: сданный тест отмечает тему пройденной на карте и в ИПР.

Вопросы с собеседований

Смотреть все
Чем list comprehension отличается от генераторного выражения?Junior

[...] сразу строит весь список в памяти, (...) — ленивый генератор.

Полный разбор
Что делают send, throw и yield from у генераторов?Middle

Генератор — не только источник значений: send(x) передаёт значение внутрь (оно становится результатом выражения yield), throw(exc) бросает исключение в точке yield, close() завершает. yield from делегирует подгенератору: пробрасывает значения, send и throw, а…

Полный разбор
Что такое генератор и чем он полезен?Junior

Генератор — функция с yield: отдаёт значения по одному и замирает между ними, сохраняя состояние.

Полный разбор
Какие инструменты itertools стоит знать?Middle

Ленивые строительные блоки: chain (склеить), islice (срез итератора), groupby (группы подряд идущих — нужна предварительная сортировка), product/permutations/combinations, accumulate (накопительные суммы), batched (3.12, пачки по n), tee, zip_longest…

Полный разбор
Чем итератор отличается от итерируемого объекта?Junior

Итерируемый объект умеет выдать итератор (__iter__), итератор выдаёт значения по одному (__next__).

Полный разбор
Как работают срезы в Python?Junior

seq[start:stop:step] — новая последовательность с start включительно до stop не включая.

Полный разбор

Разборы темы

← Вся карта «Python»

Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования