工作生活

最简单明了的yield from解释

2019-07-02  本文已影响0人  霡霂976447044
def one():
    print('one start')
    res = yield from two()
    print('function get res: ', res)
    return 'one' + res


def two():
    print('two start')
    res = yield from three()
    return res


def three():
    yield 1
    return 'three'


if __name__ == '__main__':
    gen = one()
    send_1 = gen.send(None)
    print(send_1)
    send_2 = gen.send(None)
    print(send_2)

不要把yield from 想的太复杂,就把yield from调用看作是普通函数调用来看代码。一旦遇到yield会返回。再次send,特点和生成器一样。

  1. 当send里面的函数先遇到的是yield from语句,那么会继续往下调用,直到遇到yield。
main->one()->two()->three->遇到yield- >main
  1. 遇到yield语句,会直接返回到send语句所在函数, 也就是send_1 = gen.send(None),send_1 赋值
  2. 再次调用send语句,就会变成1的反向调用
three()->two()->one->main
  1. yield from后面的函数返回值会得到,赋值给左值
three()的返回值会给two()的res,two()的返回值会给one()
上一篇下一篇

猜你喜欢

热点阅读