Python中的协程

4 投票
1 回答
2590 浏览
提问于 2025-04-17 05:01

我在一本书里看到以下代码,有一些问题想问。

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。去了解一下函数装饰器的相关知识,你就会明白发生了什么。

撰写回答