Создание генератора#

Функция-генератор - это функция, в которой присутствует ключевое слово yield. При вызове, эта функция возвращает объект генератор.

Обычная функция завершает работу если:

  • встретилось выражение return

  • закончился код функции (это срабатывает как выражение return None)

  • возникло исключение

После выполнения функции, управление возвращается и программа выполняется дальше. Все аргументы, которые передавались в функцию, локальные переменные, все это теряется. Остается только результат, который вернула функция.

Функция может возвращать список элементов, несколько объектов или возвращать разные результаты, в зависимости от аргументов, но она всегда возвращает какой-то один результат.

С точки зрения синтаксиса, генератор выглядит как обычная функция, но, вместо return, используется оператор yield. Каждый раз, когда внутри функции встречается yield, генератор приостанавливается и возвращает значение. При следующем запросе, генератор начинает работать с того же места, где он завершил работу в прошлый раз. Так как yield не завершает работу генератора, он может использоваться несколько раз.