On Thu, Mar 26, 2009 at 4:19 PM, P.J. Eby <p...@telecommunity.com> wrote: > At 12:27 PM 3/26/2009 -0700, Guido van Rossum wrote: >> There is some clear low-hanging fruit for Greg's proposal >> where no trampoline or helpers are needed -- but where currently >> refactoring complex code containing many yield statements is >> cumbersome due to the nee to write each "subroutine" call as "for x in >> subroutine(): yield x" -- being able to replace this with "yield from >> subroutine()" is a conceptual advantage to me that is not proportional >> to the number of characters saved. > > Right - I don't object to the concept of "yield from" -- I'm -0 on that. > What I don't like is the confusion of adding "return values" to generators, > at least using the 'return' statement.
Well, after thinking about it some more I think I am going to have to take an executive decision and override your opposition. :-) I wasn't keen on this myself at the outset, but it's growing on me, and I am finding Greg's motivation for wanting to do it this way pretty strong. I'm +1 on "yield from" and +0 on return values in generators. That +0 could turn into a +1 if there was a way to flag this as an error (at runtime), at least if the return is actually executed: def g(): yield 42 return 43 for x in g(): print x # probably expected to print 42 and then 43 Perhaps the exception used in this case could be a different exception than StopIteration? Regular iteration could either just pass this exception through or explicitly check for it (a single pointer comparison could usually suffice), depending on whether it would be a subclass of StopIteration. Greg, what do you think? (There could be good reasons not to complexificate it this way too.) -- --Guido van Rossum (home page: http://www.python.org/~guido/) _______________________________________________ Python-Dev mailing list Python-Dev@python.org http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com