Урок 54. Итераторы и генераторные выражения

📁 Блок: Python Fundamentals / Итерация и генераторы ⏱️ Время изучения: ~60 мин 🎯 Сложность: Средняя
#iter #next #count #for #isinstance #in #print #from #import #is #list #class #def #return #if #raise #any #isupper #all #len #range #while #try #except #break #join #not #abs #ord #open #write #and #with #as #append #sum #enumerate #yield #mkdir #items #input #lower #add #type

⚡ Кратко: суть урока

Урок посвящён итераторам и генераторным выражениям — механизмам ленивой обработки последовательностей в Python.

Итератор хранит не сами данные, а ссылку на источник и текущую позицию, поэтому экономит память при работе с большими коллекциями.

Любой цикл for в Python работает через встроенные функции iter() и next() и автоматически ловит исключение StopIteration.

Модуль itertools позволяет строить бесконечные последовательности, объединять коллекции и получать перестановки без ручных вложенных циклов.

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

Это делает генераторы удобными для больших файлов, потоков данных и передачи в функции any() / all().

Ключевые конструкции: iter(), next(), __iter__(), __next__(), itertools.count/cycle/chain/product/permutations, генераторные выражения.

Минимальный пример: squares = (x ** 2 for x in range(5)); for num in squares: print(num).

Топ-3 ошибки: повторное использование исчерпанного итератора, вызов next() на списке, ожидание индексации генератора как списка.

О чём этот урок

В этом уроке вы узнаете, как Python умеет перебирать коллекции поэлементно без загрузки всех значений в память сразу. Мы разберём протокол итерации, встроенные функции iter() и next(), исключение StopIteration и работу цикла for «под капотом».

Также познакомимся с модулем itertools — набором эффективных инструментов для построения и комбинирования итераторов — и с генераторными выражениями, которые заменяют промежуточные списки ленивыми вычислениями.

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

Цели

  • Отличать итерируемый объект от итератора.
  • Создавать итераторы через iter() и получать элементы через next().
  • Понимать роль __iter__() и __next__() в протоколе итерации.
  • Обрабатывать конец последовательности с помощью StopIteration и значения по умолчанию в next().
  • Использовать itertools для бесконечных последовательностей, объединения и декартова произведения.
  • Создавать и применять генераторные выражения для экономии памяти.
  • Сравнивать потребление памяти списков и генераторов через sys.getsizeof().

📚 Что повторить перед изучением

🎯 Что изучать дальше

  • → Следующий урок: Summary session 14
  • Закрепите материал, переписав несколько списковых включений из предыдущих уроков на генераторные выражения.
  • Загляните в ресурсы — там ссылки на официальную документацию по итераторам, itertools и генераторным выражениям.