Python.05

March 20, 2015, 2:45 a.m.

Материалы пятой лекции.

Комментарии

  1. Если в генераторной функции встречается 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 это значение тоже "пробрасывает".

  2. Что на самом деле происходит, когда вы пишите в коде yield from, можно узнать в PEP 0380.

comments powered by Disqus