Зачем нужен yield вместо return в функции ?

Спросят с вероятностью 14%



Ключевое слово yield используется для создания генератора, который является разновидностью итератора. В отличие от обычных функций, которые возвращают значения с помощью return и завершают своё выполнение, функции с yield возвращают генератор, который при каждом вызове продолжает выполнение функции с того места, где было сделано последнее yield.



Преимущества использования yield вместо return:

1️⃣Экономия памяти: Генераторы вычисляют значения по требованию (lazy evaluation), что позволяет им обрабатывать даже очень большие последовательности данных, не загружая всю последовательность в память. Это особенно полезно для обработки больших файлов или потоков данных.



2️⃣Удобство в управлении состоянием: Функции с yield удобны, когда нужно управлять сложным состоянием внутри функции. Функция может "замораживать" своё состояние между вызовами и продолжать выполнение с того места, где она остановилась.



3️⃣Составление итераторов: Создание итератора с помощью yield значительно упрощается по сравнению с классами итераторов, которые требуют определения методов __iter__() и __next__().



Предположим, нам нужно итерировать через числа Фибоначчи. Вместо создания списка всех чисел, что может быть неэффективным с точки зрения памяти, можно использовать генератор:

def fibonacci(n):

a, b = 0, 1

for _ in range(n):

yield a

a, b = b, a + b



# Создание генератора для первых 10 чисел Фибоначчи

fib_gen = fibonacci(10)



# Итерация по генератору

for num in fib_gen:

print(num)




В чём разница между ними?

return возвращает значение и завершает выполнение функции.

yield возвращает значение и "приостанавливает" выполнение функции, позволяя продолжить с того же места при следующем вызове.



yield используется для создания генераторов, которые помогают экономить память и упрощать код, особенно при работе с большими данными. Это как "пауза" в фильме, после которой можно продолжить просмотр с того же момента.



👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 207 вопроса на Data Scientist. Ставь 👍 если нравится контент



🔐 База собесов | 🔐 База тестовых