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")
通过使用 coroutine
,不需要一开始就调用 .next()
。我的理解是,如果 r = receiver()
,那么 r = start
,所以当我调用 r.send()
时,它等于 start.send()
,然后我再调用 .next()
,对吧?但是结果却不是我预期的。
1 个回答
2
你的问题不是出在协程上,而是你对函数装饰器的理解有误。在 r = receiver()
这行代码之后,r 不是开始,而是 g。去了解一下函数装饰器的相关知识,你就会明白发生了什么。