Создание генератора#
Функция-генератор - это функция, в которой присутствует ключевое слово yield. При вызове, эта функция возвращает объект генератор.
Обычная функция завершает работу если:
встретилось выражение return
закончился код функции (это срабатывает как выражение
return None
)возникло исключение
После выполнения функции, управление возвращается и программа выполняется дальше. Все аргументы, которые передавались в функцию, локальные переменные, все это теряется. Остается только результат, который вернула функция.
Функция может возвращать список элементов, несколько объектов или возвращать разные результаты, в зависимости от аргументов, но она всегда возвращает какой-то один результат.
С точки зрения синтаксиса, генератор выглядит как обычная функция,
но, вместо return, используется оператор yield
.
Каждый раз, когда внутри функции встречается yield, генератор приостанавливается и возвращает значение.
При следующем запросе, генератор начинает работать с того же места, где он завершил работу в прошлый раз.
Так как yield не завершает работу генератора, он может использоваться несколько раз.