Python @Coroutine Decorator - PullRequest
       16

Python @Coroutine Decorator

0 голосов
/ 07 марта 2020

Есть ли декоратор сопрограммы, встроенный в python? Я видел что-то подобное в tornado, но есть ли в python что-то похожее на это?

@coroutine
def func():
    while True:
        val = yield

Так что я могу назвать это и send немедленно, без использования next. Я полагаю, что базовый c подход был бы следующим:

def coroutine(func):
    @functools.wraps(func)
    def wrapper_coroutine(*args, **kwargs):
        f = func(*args, **kwargs)
        next(f)
        return f
    return wrapper_coroutine

Но мне интересно, есть ли в python эта встроенная функция, где я пропускаю.

1 Ответ

1 голос
/ 25 апреля 2020

Вы, вероятно, уже ответили на это для себя, но в интересах всех, кто сталкивался с этим вопросом, я искал то же самое и обнаружил следующее:

Простой ответ, как указано в комментарии есть; похоже, в стандартной библиотеке такого нет.

Ответы на тему сопрограмм и их применение на этом сайте указывают на реализацию @ coroutine decorator Дэвида Бизли, фрагмент кода которого приведен в списке ниже для удобства.

def coroutine(func):
    def start(*args,**kwargs):
        cr = func(*args,**kwargs)
        cr.next()
        return cr
    return start
...