Python: 协程中 yield 执行和返回顺序

2020-07-23  本文已影响0人  X4tar

廖雪峰教程中协程的代码如下:

def consumer():
    r = ''
    while True:
        n = yield r
        if not n:
            return
        print('[CONSUMER] Consuming %s...' % n)
        r = '200 OK'

def produce(c):
    c.send(None)
    n = 0
    while n < 5:
        n = n + 1
        print('[PRODUCER] Producing %s...' % n)
        r = c.send(n)
        print('[PRODUCER] Consumer return: %s' % r)
    c.close()

c = consumer()
produce(c)

c.send(None) consumer() 执行到 yield r ,但是没有对n赋值,属于启动生成器的操作。
c.send(1)时,再将 send的参数传递给n:1。不管 send() 传入 None 还是其他值,都是碰到 yield 立即返回;如果不是启动生成器send(None),则先完成左值赋值(即启动生成器返回后的下一条语句),然后继续运行,直到再次碰到 yield

上一篇 下一篇

猜你喜欢

热点阅读