This is brought up from time to time. I believe it is based on a misunderstanding of coroutines.

On Mon, Feb 16, 2015 at 4:53 AM, Luciano Ramalho <luciano@ramalho.org> wrote:
Coroutines are useless until primed by a next(my_coro) call. There are
decorators to solve this by returning a primed coroutine. Such
decorators add another problem: now the user may be unsure whether a
specific coroutine from a third-party API should be primed or not
prior to use.

How about having a built-in function named send() with the signature
send(coroutine, value) that does the right thing: sends a value to the
coroutine, priming it if necessary. So instead of writing this:

>>> next(my_coro)
>>> my_coro.send(a_value)

You could always write this:

>>> send(my_coro, a_value)

At a high level, the behavior of send() would be like this:

def send(coroutine, value):
    if inspect.getgeneratorstate() == 'GEN_CREATED':
        next(coroutine)
    coroutine.send(value)

Consider the above pseudo-code. Proper handling of other generator
states should be added.

This would make coroutines easier to use, and would make their basic
usage more consistent with the usage of plain generators using a
function syntax -- eg. next(my_gen) -- instead of method call syntax.

What do you think? If this has been discussed before, please send me a
link (I searched but came up empty).

Best,

Luciano



--
Luciano Ramalho
Twitter: @ramalhoorg

Professor em: http://python.pro.br
Twitter: @pythonprobr
_______________________________________________
Python-ideas mailing list
Python-ideas@python.org
https://mail.python.org/mailman/listinfo/python-ideas
Code of Conduct: http://python.org/psf/codeofconduct/



--
--Guido van Rossum (python.org/~guido)