TGViewer
Python академия Python академия @pythonofff · 7.13K subscribers
Post #2837 691

Forwarded from Библиотека Python разработчика | Книги по питону

yield from — элегантная передача управления

Если вы пишете генераторы, которые вызывают другие генераторы — забудьте про for x in sub(): yield x. Есть способ проще и мощнее.

Оператор yield from позволяет передавать элементы из подгенератора напрямую, без лишнего кода. Но фишка не только в лаконичности — он также автоматически пробрасывает исключения и возвращаемые значения из подгенератора.

Вот классика:


def gen():
for x in range(3):
yield x

def wrapper():
for x in gen():
yield x


Можно короче и лучше:


def wrapper():
yield from gen()


Но главное — yield from пробрасывает return-значение из подгенератора (начиная с Python 3.3):


def sub():
yield 1
yield 2
return 'done'

def main():
result = yield from sub()
print('Sub returned:', result)

for _ in main():
pass
# Выведет: Sub returned: done


А ещё через yield from можно проксировать значения внутрь генератора — например, в сопрограммах:


def delegator():
result = yield from coroutine()
print('coroutine done:', result)

def coroutine():
x = yield
y = yield
return x + y

g = delegator()
next(g) # Старт
next(g) # coroutine ждет x
g.send(10) # x = 10
print(g.send(20)) # y = 20 → return 30
# Выведет: coroutine done: 30


Итог: если вы пишете генераторы — освоение yield from даст вам лаконичный синтаксис, проброс return-значений, исключений и взаимодействие на новом уровне.

👉@BookPython
  • 👍 3
  • ❤ 1
  • 👎 1
More from @pythonofff
  1. Sep 30, 2026Функции высшего порядка Функции высшего порядка - функции принимающие или возвращающие дру…
  2. Sep 27, 2026Конструктор класса У классов практически во всех языках есть конструкторы — это такие спец…
  3. Sep 24, 2026Анонимные функции Часто функции нужны только один раз, причем короткие. И избыточно создав…
  4. Sep 23, 2026Бесконечные списки Мы уже рассказывали про важность копирования списков. Но именно из-за т…
  5. Sep 21, 2026Заглушки Для создания пустых функций и классов есть сразу два способа соответствующих прав…
  6. Sep 20, 2026Параметры функции *args, **kwargs Думаю, многие хоть раз видели такую запись, сейчас мы уз…
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 →