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