Генераторы (Generators) в Python — это функции, которые возвращают последовательность значений по одному, сохраняя свое состояние между вызовами. В отличие от обычных функций, которые используют return для возврата результата, генераторы используют yield, что делает их особенно мощными при работе с большими объемами данных или при создании бесконечных последовательностей.
Генераторы реализуют ленивую генерацию данных (lazy evaluation), что означает, что значения вычисляются только тогда, когда они действительно нужны. Это делает генераторы крайне эффективными в плане использования памяти и производительности.
def say_hello():
yield "Привет"
yield "Как дела?"
yield "До свидания"
Вызов такой функции возвращает объект генератора:
g = say_hello()
print(next(g)) # Привет
print(next(g)) # Как дела?
print(next(g)) # До свидания
После исчерпания значений возникает исключение StopIteration.
def fibonacci():
a, b = 0, 1
while True:
yield a
a, b = b, a + b
f = fibonacci()
for _ in range(10):
print(next(f)) # Печатает первые 10 чисел Фибоначчи
Каждый генератор является итератором, но не каждый итератор — генератор. Генераторы автоматически реализуют протокол итераторов, включая методы __iter__() и __next__(), упрощая их создание.
Присоединяйтесь к нашим курсам для углубленного изучения области ИТ. Отправьте запрос для получения подробной информации!