美文网首页
Python: 协程中 yield 执行和返回顺序

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

作者: X4tar | 来源:发表于2020-07-23 23:44 被阅读0次

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

    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

    相关文章

      网友评论

          本文标题:Python: 协程中 yield 执行和返回顺序

          本文链接:https://www.haomeiwen.com/subject/ewzklktx.html