Можно ли бесконечно вызывать `next()` у генератора и что произойдёт после его исчерпания?

После завершения генератора next() возбуждает StopIteration и последующие вызовы тоже остаются завершёнными. Бесконечно получать значения можно только из генератора, который сам не заканчивается.

Короткий ответ

Что ответить на собеседовании

После завершения генератора next() возбуждает StopIteration и последующие вызовы тоже остаются завершёнными. Бесконечно получать значения можно только из генератора, который сам не заканчивается.

Подробный разбор

Ответ с пояснениями

После завершения генератора next() возбуждает StopIteration и последующие вызовы тоже остаются завершёнными. Бесконечно получать значения можно только из генератора, который сам не заканчивается.

Например, после единственного yield 1 второй вызов next завершит итерацию. next(iterator, default) вместо исключения возвращает default, если элементов больше нет. Возобновить исчерпанный генератор с начала нельзя: нужно создать новый экземпляр вызовом генераторной функции. При бесконечной последовательности ответственность за условие остановки и освобождение ресурсов лежит на потребителе.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее