Вопрос проверяет понимание генераторов и ленивых вычислений в Python, что важно для оптимизации памяти и работы с потоками данных.
Оператор yield в Python используется внутри функций для создания генераторов. В отличие от обычной функции, которая использует return и завершается после возврата значения, функция с yield возвращает объект-генератор. При каждом вызове next() или при итерации в цикле for, генератор выполняет код до следующего yield, приостанавливает выполнение и возвращает значение. Состояние функции (локальные переменные, позиция в коде) сохраняется между вызовами.
Рассмотрим простой пример генератора чисел Фибоначчи:
def fibonacci(limit):
a, b = 0, 1
while a < limit:
yield a
a, b = b, a + b
# Использование
for num in fibonacci(100):
print(num) # Выведет: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89Здесь yield позволяет генерировать числа по одному, не создавая список всех значений. Это экономит память, особенно при работе с большими последовательностями.
Используйте yield, когда нужно работать с последовательностями данных, которые не помещаются в память целиком, или когда требуется ленивая генерация значений. Это делает код более эффективным по памяти и позволяет обрабатывать данные по мере необходимости.