Зачем нужен yield вместо return в функции ?
Спросят с вероятностью 14%
Ключевое слово yield используется для создания генератора, который является разновидностью итератора. В отличие от обычных функций, которые возвращают значения с помощью
Преимущества использования
1️⃣Экономия памяти: Генераторы вычисляют значения по требованию (lazy evaluation), что позволяет им обрабатывать даже очень большие последовательности данных, не загружая всю последовательность в память. Это особенно полезно для обработки больших файлов или потоков данных.
2️⃣Удобство в управлении состоянием: Функции с
3️⃣Составление итераторов: Создание итератора с помощью
Предположим, нам нужно итерировать через числа Фибоначчи. Вместо создания списка всех чисел, что может быть неэффективным с точки зрения памяти, можно использовать генератор:
В чём разница между ними?
✅
✅
👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 207 вопроса на Data Scientist. Ставь 👍 если нравится контент
🔐 База собесов | 🔐 База тестовых
Спросят с вероятностью 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. Ставь 👍 если нравится контент
🔐 База собесов | 🔐 База тестовых