Короткий ответ Генераторы — простой и экономный по памяти способ создавать итераторы в Python. Функция становится генераторной, если в её теле встречается ключевое слово yield: при вызове она возвращает объект-генератор, который выдаёт значения по одному, только когда их запрашивают. Как это работает подробнее Ленивый механизм позволяет не хранить всю последовательность в памяти, что важно для больших и даже бесконечных данных. Приостановка. Каждый раз при выполнении yield функция приостанавливается, возвращает текущее значение и запоминает своё состояние. Продолжение. При запросе следующего значения через for или next() выполнение возобновляется ровно с места остановки. Полноценный итератор. Генератор автоматически реализует методы __iter__() и __next__(). Завершение. Когда функция доходит до конца или встречает return, выбрасывается исключение StopIteration, сигнализирующее об исчерпании. Пример кода Что использовать на практике Большие данные. Для чтения потоков и обработки больших последовательностей испо