single
Нескінченні Генератори
Свайпніть щоб показати меню
Згадайте, що yield призупиняє виконання генератора і відновлює його при наступному виклику next(). До цього часу розглянуті генератори мали чітку точку завершення. Однак генератори стають особливо потужними у поєднанні з нескінченним циклом – вони можуть безкінечно генерувати значення, не зберігаючи їх у пам'яті.
Нескінченні генератори з while True
Використання циклу while True всередині генератора створює нескінченну послідовність – те, що неможливо зберегти у вигляді списку. Генератор видає наступне значення лише при виклику next():
1234567891011def counter(): count = 1 while True: # Runs forever yield count # Return current value and pause count += 1 # Resume from here on the next call gen = counter() print(next(gen)) # 1 print(next(gen)) # 2 print(next(gen)) # 3
Скільки б разів ви не викликали next(), генератор завжди матиме нове значення — він ніколи не випереджає події та не зберігає значення в пам'яті.
Керування нескінченним генератором
Оскільки генератор працює безкінечно, потрібно контролювати, скільки значень ви отримуєте. Найпоширеніший спосіб — використання циклу for з range():
12345678910def counter(): count = 1 while True: yield count count += 1 gen = counter() for _ in range(5): print(next(gen)) # 1, 2, 3, 4, 5
Ніколи не ітеруйте нескінченний генератор за допомогою звичайного циклу for без умови зупинки — це призведе до безкінечного виконання та аварійного завершення програми.
Проведіть, щоб почати кодувати
Генерація унікальних ідентифікаторів користувачів за допомогою нескінченної генераторної функції. Функція id_generator() повинна безперервно створювати ідентифікатори на кшталт "ID_1", "ID_2" тощо.
- Ініціалізувати змінну
countзі значенням 1, оскільки ідентифікатори починаються з 1. - Використати нескінченний цикл
whileдля безперервної генерації ідентифікаторів. - Застосувати
yieldдля повернення поточного ідентифікатора у форматіf"ID_{count}". - Збільшувати
countна 1 після кожної ітерації. - Ініціалізувати генераторний об'єкт
id_gen, викликавшиid_generator().
Рішення
Дякуємо за ваш відгук!
single
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат