我从一本书中读到了以下代码,并对此有一些疑问。
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()
,对吧?但结果并不是我的预期。
答案 0 :(得分:2)
你的问题不是协程。你误解了函数装饰器。在r = receiver()
之后,r不是开始而是g。阅读功能装饰,你就会明白发生了什么。