Python协程例子yield讲解

def consumer():
    r = 'yield'
    while True:
        #当下边语句执行时,先执行yield r,然后consumer暂停,此时赋值运算还未进行
        #等到producer调用send()时,send()的参数作为yield r表达式的值赋给等号左边
        n = yield r #yield表达式可以接收send()发出的参数
        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)   #调用consumer生成器
        print('[PRODUCER] Consumer return: %s' % r)
    c.close()

c = consumer()
produce(c)

注:send需要先调用send(None),因为只有生成器是暂停状态才可以接收send的参数。 

这里可以参考廖雪峰生成器


猜你喜欢

转载自blog.csdn.net/qq_21467113/article/details/80300438