Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Вивчайте Нескінченні Генератори | Специфікація Значення, Що Повертається Функцією
Підручник з функцій Python
Секція 4. Розділ 5
single

single

Нескінченні Генератори

Свайпніть щоб показати меню

Згадайте, що yield призупиняє виконання генератора і відновлює його при наступному виклику next(). До цього часу розглянуті генератори мали чітку точку завершення. Однак генератори стають особливо потужними у поєднанні з нескінченним циклом – вони можуть безкінечно генерувати значення, не зберігаючи їх у пам'яті.

Нескінченні генератори з while True

Використання циклу while True всередині генератора створює нескінченну послідовність – те, що неможливо зберегти у вигляді списку. Генератор видає наступне значення лише при виклику next():

1234567891011
def 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():

12345678910
def counter(): count = 1 while True: yield count count += 1 gen = counter() for _ in range(5): print(next(gen)) # 1, 2, 3, 4, 5
Note
Примітка

Ніколи не ітеруйте нескінченний генератор за допомогою звичайного циклу for без умови зупинки — це призведе до безкінечного виконання та аварійного завершення програми.

Завдання

Проведіть, щоб почати кодувати

Генерація унікальних ідентифікаторів користувачів за допомогою нескінченної генераторної функції. Функція id_generator() повинна безперервно створювати ідентифікатори на кшталт "ID_1", "ID_2" тощо.

  1. Ініціалізувати змінну count зі значенням 1, оскільки ідентифікатори починаються з 1.
  2. Використати нескінченний цикл while для безперервної генерації ідентифікаторів.
  3. Застосувати yield для повернення поточного ідентифікатора у форматі f"ID_{count}".
  4. Збільшувати count на 1 після кожної ітерації.
  5. Ініціалізувати генераторний об'єкт id_gen, викликавши id_generator().

Рішення

Switch to desktopПерейдіть на комп'ютер для реальної практикиПродовжуйте з того місця, де ви зупинились, використовуючи один з наведених нижче варіантів
Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 4. Розділ 5
single

single

Запитати АІ

expand

Запитати АІ

ChatGPT

Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат

some-alt