Сопрограммы в питоне - PullRequest
       12

Сопрограммы в питоне

4 голосов
/ 26 октября 2011

Я прочитал следующий код из книги, и у меня есть несколько вопросов по этому поводу.

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 голосов
/ 26 октября 2011

Ваша проблема не в сопрограмме. Вы неправильно понимаете функцию декоратора. После r = receiver() r не запускается, а g. Читайте о функции украшения, и вы поймете, что происходит.

...