TGViewer
Zen of Python Zen of Python @zen_of_python · 18.8K subscribers
Post #3593 3.24K
Простыми словами: yield в Python

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

Когда функция с yield вызывается, она возвращает объект-генератор. Этот объект можно итерировать (перебирать) для получения значений, которые функция «производит» по мере необходимости.

Предположим, у нас есть функция, которая возвращает числа от 1 до 3:

def simple_generator():
yield 1
yield 2
yield 3

# Получаем генератор
gen = simple_generator()

# Итерируем генератор
for value in gen:
print(value)

# Результат:
# 1
# 2
# 3


Как это работает:

1. Функция simple_generator использует yield для возврата значений.
2. Каждый вызов yield приостанавливает выполнение функции и возвращает значение.
3. На следующий вызов итерации выполнение функции продолжается с места, где оно было приостановлено последним yield.

А теперь представьте, что вам нужно обработать очень большой список чисел, но вы хотите сделать это постепенно, по одному числу за раз. В этом случае генератор с yield идеально подходит.

Например, для фильтрации четных чисел:

def get_even_numbers(numbers):
for number in numbers:
if number % 2 == 0:
yield number

big_list = range(1000000) # Большой диапазон чисел

# Используем генератор для получения четных чисел
even_numbers = get_even_numbers(big_list)

# Печатаем первые 10 четных чисел
for _ in range(10):
print(next(even_numbers))

# Результат:
# 0
# 2
# 4
# 6
# 8
# 10
# 12
# 14
# 16
# 18


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

1. Экономия памяти. Генератор не загружает все данные в память сразу, а генерирует элементы по мере необходимости.
2. Упрощение кода. Использование yield упрощает написание функций, которые должны постепенно возвращать результаты.
3. Меньше кода для обработки больших наборов данных. Генераторы позволяют легко работать с большими данными без необходимости вручную управлять промежуточными структурами данных.

#простымисловами
  • ❤ 13
  • 🔥 4
  • 👍 3
More from @zen_of_python
  1. Oct 3, 2026Как вернуть значение из всплывающего окна в форму Django Admin Django Admin умеет создават…
  2. Oct 2, 2026Охрана трубопровода длиной 400 километров Камеры на столбах не заглянут за угол, дрон виси…
  3. Oct 1, 2026Как не сломать pickle собственным исключением Python Если конструктор исключения принимает…
  4. Oct 1, 2026Как выстроить защиту цепочки поставок Python Эшелонированная схема защиты начинается с соб…
  5. Sep 30, 2026Пакетная обработка в Python: где strict=True не спасает запись С Python 3.12 itertools.bat…
  6. Sep 30, 2026Как воспроизводить гонки потоков Python с помощью blanket Обычно порядок выполнения потоко…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →