Материалы пятой лекции.
Комментарии
-
Если в генераторной функции встречается return, то он приводит к генерации исключения StopIteration, но куда девается значение, возвращаемое через return? Вот и ответ:
def f(): yield 1 return 2 def g(): return (yield from f()) def get_return(generator): while True: try: next(generator) except StopIteration as e: return e.value print(get_return(f())) # 2 print(get_return(g())) # 2
Более того, yield from это значение тоже "пробрасывает".
-
Что на самом деле происходит, когда вы пишите в коде yield from, можно узнать в PEP 0380.