在Python中的协同程序

时间:2011-10-26 03:03:05

标签: python decorator coroutine

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

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")

使用coroutine时,不需要初始.next()。我的理解是,如果是r = receiver(),那么r = start,那么当我致电r.send()时,它等于start.send(),然后我再次致电.next(),对吧?但结果并不是我的预期。

1 个答案:

答案 0 :(得分:2)

你的问题不是协程。你误解了函数装饰器。在r = receiver()之后,r不是开始而是g。阅读功能装饰,你就会明白发生了什么。