[Python-ideas] Revised revised revised PEP on yield-from

Greg Ewing greg.ewing at canterbury.ac.nz
Tue Feb 17 05:53:57 CET 2009


Guido van Rossum wrote:

 > There better be a pretty darn good reason to do this.

I think that making it easy to use generators as
lightweight threads is a good enough reason.

 > I really don't
 > like overloading return this way -- normally returning from a
 > generator is equivalent to falling off the end and raises
 > StopIteration

It still is. It's just that if you happen to return a
value, it gets attached to the StopIteration for the
use of anything that wants to care. It will make no
difference at all to anything already existing.

Also, if a generator that returns something gets called
in a context that doesn't know about generator return
values, the value is simply discarded, just as with
an ordinary function call that ignores the return
value.

 > I'm not sure I like this interpretation of .send() -- it looks
 > asymmetrical with the way .send() to non-generator iterators is
 > treated in other contexts, where it is an error.

I wouldn't object to raising an exception in that case.
Come to think of it, doing that would me more consistent
with the idea of the caller talking directly to the
subgenerator.

 > And that could in turn be a generator with another such slot, right?

That's right.

 > Hopefully the testing for the presence of .throw, .send and .close
 > could be done once at the start of the yield-from and represented as a
 > set of flags.

Yes. You could even cache bound methods for these if you
wanted.

 > I recommend that you produce a working implementation of this; who
 > knows what other issues you might run into

Good idea. I'll see what I can come up with.

-- 
Greg




More information about the Python-ideas mailing list