在Python中的协同程序

我从一本书中读到了以下代码,并对此有一些疑问.

def coroutine(func):
    def start(*args, **kwargs):
        g = func(*args, **kwargs)
        g.next()
        return g
    return start

@coroutine
def receiver():
    print("Ready to receive")
    while True:
        n = (yield)
        print("Got %s" % n)

r = receiver()
r.send("hello, world")

通过使用协同程序,不需要初始的.next().我的理解是,如果r = receiver(),则r = start,所以当我调用r.send()时,它等于start.send(),然后我再次调用.next(),对吧?但结果并不是我的预期.

最佳答案 你的问题不是协程.你误解了函数装饰器.在r = receiver()之后,r不是启动而是g.阅读功能装饰,你就会明白发生了什么.

点赞