Sobes.tech
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.