Генератор — это функция, которая возвращает объект итератора.



Она выглядит как обычная функция, за исключением того, что она содержит выражение yield для создания серии значений, которые можно использовать в цикле for … in или которые можно извлечь по одному с помощью функции next().



Сверху самый простой пример функции генератора.



Любая функция содержащая ключевое слово yield, является функцией генератора.



Генераторы это отличный способ улучшить производительность кода, и они очень просты в использовании!



Когда вызывается функция генератора, то она не возвращает единственное значение, как это делает оператор return. Вместо этого она возвращает объект генератора, который поддерживает протокол итератора.



Разница между yield и оператором return заключается в том, что при достижении выхода, состояние выполнения генератора приостанавливается и локальные переменные сохраняются. При следующем вызове метода генератора next() функция возобновит свое выполнение.



Подробнее о генераторах вы можете почитать здесь.