Ленивые вычисления (lazy evaluation) - это стратегия вычислений, при которой вычисления откладываются до тех пор, пока их результат действительно не понадобится. В Python, генераторы и ключевое слово yield
играют важную роль в реализации ленивых вычислений.
Вот как yield
помогает реализовать ленивость:
yield
, она становится генератором. Вместо возврата значения, генератор возвращает объект-итератор. Код внутри генератора не выполняется сразу.for
или функции next()
). При каждом вызове next()
, генератор возобновляет свою работу с места, где он остановился в прошлый раз (то есть, после последнего yield
), выполняет код до следующего yield
и возвращает значение, указанное после yield
.Пример:
def infinite_sequence():
"""Бесконечная последовательность чисел."""
num = 0
while True:
yield num
num += 1
# Создаем генератор
generator = infinite_sequence()
# Получаем только первые 5 чисел
for i in range(5):
print(next(generator)) # Вычисление происходит только при вызове next()
# Вывод:
# 0
# 1
# 2
# 3
# 4
В этом примере функция infinite_sequence()
создает бесконечную последовательность чисел. Если бы мы попытались создать список всех этих чисел сразу, мы бы получили ошибку нехватки памяти. Однако, с помощью yield
мы можем получать числа по одному, по мере необходимости, что делает вычисления ленивыми и эффективными.
Таким образом, yield
позволяет функциям возвращать итераторы, которые вычисляют значения только при необходимости, что является ключевой характеристикой ленивых вычислений.