[Python-Dev] yield back-and-forth?

Guido van Rossum guido at python.org
Fri Jan 20 20:19:30 CET 2006


On 1/20/06, Phillip J. Eby <pje at telecommunity.com> wrote:
> At 10:17 AM 01/20/2006 -0800, Guido van Rossum wrote:
> >The discussion about PEP 343 reminds me of the following. Bram Cohen
> >pointed out in private email that, before PEP 342, there wasn't a big
> >need for a shortcut to pass control to a "sub-generator" because the
> >following for-loop works well enough:
> >
> >  def main_generator():
> >       ...
> >       for value in sub_generator():
> >           yield value
> >
> >but now that yield can return a value, that value might have to be
> >passed into sub_generator(), not to mention of exceptions. I'm sure
> >there's a way to write that (although I haven't found the time to
> >figure it out) but I expect it to be cumbersome and subtle. I don't
> >think a helper function can be created to solve this problem, because
> >the yield syntax is essential.
> >
> >Bram suggested the following syntax:
> >
> >   def main_generator():
> >       ...
> >       yieldthrough sub_generator()
> >
> >I'm not keen on that particular keyword, but I do believe a syntactic
> >solution is needed, if the problem is important enough to be solved.
>
> What's the use case for this?  In the coroutine use case, the PEP 342
> sample trampoline takes care of this.  If you yield a sub-generator (i.e.
> 'yield sub_generator()'), the trampoline effectively replaces the parent
> with the child until the child is complete.

That's a rather specialized, subtle and elaborate framework though,
and at this time I believe it isn't planned to be part of Python 2.5
(right?).

> So, that leaves only non-coroutine use cases, and I'm having a hard time
> thinking of any where there would be bidirectional communication.

Any other use of generators where the return value of yield is used;
as soon as you do this you may later want to refactor the code to to
include sub-iterators. (There *are*other uses besides the trampoline,
right? :-)

--
--Guido van Rossum (home page: http://www.python.org/~guido/)


More information about the Python-Dev mailing list