[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