single
Генераторні функції
Свайпніть щоб показати меню
Генераторна функція — це особливий тип функції, яка використовує ключове слово yield замість return для створення послідовності значень. Коли генераторна функція викликається, вона повертає об'єкт-ітератор, який можна перебирати для отримання значень по одному.
Основна перевага генераторних функцій — ефективне використання пам'яті. Замість створення всієї послідовності наперед і зберігання її в пам'яті, генератори створюють значення на льоту у міру необхідності.
Як працює yield
На відміну від return, який повністю завершує виконання функції, yield призупиняє функцію та зберігає її стан. Під час наступного виклику next() генератор продовжує виконання саме з того місця, де був зупинений:
12345678910def count_up(start, stop): while start <= stop: yield start # Pause and return the current value start += 1 # Resume from here on the next call counter = count_up(1, 3) print(next(counter)) # 1 print(next(counter)) # 2 print(next(counter)) # 3
Можна також ітеруватися по генератору за допомогою циклу for – він автоматично викликає next(), поки генератор не буде вичерпано:
1234567def count_up(start, stop): while start <= stop: yield start start += 1 for value in count_up(1, 5): print(value) # 1, 2, 3, 4, 5
Коли генератор вичерпано (немає більше значень для повернення через yield), виклик next() призведе до помилки StopIteration. Цикл for обробляє це автоматично.
Проведіть, щоб почати кодувати
Реалізація генераторної функції even_numbers, яка повертає парні числа у заданому діапазоні.
- Визначення генераторної функції
even_numbers, що приймає два параметри:startтаstop. - Використання циклу
whileдля ітерації, покиstartменше або дорівнюєstop. - Використання
yieldдля повернення значенняstartлише якщо воно парне (ділиться на 2). - Збільшення
startна 1 після кожної ітерації. - Використання циклу
forдля виведення всіх згенерованих значень.
Рішення
Дякуємо за ваш відгук!
single
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат