Middle
215
Wat is de rol van de constructie yield from in Python?
Antwoord van AI
sobes.tech AI
Конструкция yield from используется для делегирования управления итерации от одного генератора (делегирующего генератора) к другому генератору или итератору (генератору-субгенератору).
Основные особенности yield from:
- Упрощает чтение кода: Заменяет собой более сложную логику обработки подгенератора с явными send и throw.
- Автоматически обрабатывает исключения: Исключения, отправленные в делегирующий генератор, передаются субгенератору.
- Автоматически обрабатывает возвращаемое значение: Значение, возвращенное субгенератором (через
return), становится значением выраженияyield from.
# Пример без yield from (сложнее)
def subgenerator_manual():
yield 1
yield 2
return "Manual result"
def delegator_manual():
sub = subgenerator_manual()
try:
value = next(sub)
while True:
try:
sent = yield value
value = sub.send(sent)
except StopIteration as e:
return e.value
except StopIteration as e:
return e.value
# Пример с yield from (проще)
def subgenerator_yield_from():
yield 10
yield 20
return "Yield from result"
def delegator_yield_from():
result = yield from subgenerator_yield_from()
print(f"Subgenerator returned: {result}") # Отображает значение, возвращенное субгенератором
yield 30
# Использование
g_manual = delegator_manual()
print(list(g_manual))
g_yield_from = delegator_yield_from()
print(list(g_yield_from))
В примере с yield from, основной генератор delegator_yield_from делегирует итерацию subgenerator_yield_from. Когда subgenerator_yield_from завершается с помощью return, возвращаемое значение ("Yield from result") присваивается переменной result в delegator_yield_from.