[Python-Dev] PEP 380 (yield from a subgenerator) comments
P.J. Eby
pje at telecommunity.com
Sun Mar 22 18:24:34 CET 2009
At 08:11 PM 3/22/2009 +1200, Greg Ewing wrote:
>P.J. Eby wrote:
>
>>(I'm thus finding it hard to believe there's a non-contrived
>>example that's not doing I/O, scheduling, or some other form of
>>co-operative multitasking.)
>
>Have you seen my xml parser example?
>
>http://www.cosc.canterbury.ac.nz/greg.ewing/python/yield-from/
>
>Whether you'll consider it contrived or not I don't know
>(contrivedness being such a subjective property) but it
>illustrates the style of programming I'm trying to support
>with the return-value feature.
I find the parser *without* yield-from to be much easier to follow
what's going on, actually... and don't see what benefit was obtained
by the additional complication of using send().
>>In any case, you didn't address the confusion issue: the inability
>>of generators to return a value is there for a good reason,
>
>It's there because formerly there was nowhere for the
>return value to go. If there is somewhere for it to go,
>the restriction will no longer be needed.
But that's begging the question (in the original meaning of the
phrase) of why we *want* to have two ways to return data from a generator.
>As for confusion, we ignore the return values of function
>calls all the time, without worrying that someone might be
>confused by the fact that their return value doesn't go
>anywhere. And that's the right way to think of a yield-from
>expression -- as a kind of function call, not a kind of yield.
But it's not a function call -- it's multiple *inverted* function
calls, followed by special handling of the last iteration of the
iterator it takes.
The control flow is also hard to explain, as is the implementation.
>If there's anything confusing, it's the presence of the
>word 'yield'. Its only virtue is that it gives a clue that
>the construct has something to do with generators, but
>you'll have to RTM to find out exactly what. Nobody has
>thus far suggested any better name, however.
Perhaps this is because it's not that interesting of a feature. As I
said, I wouldn't fight a yield-from statement without all this
return-value stuff, although it still seems like too much trouble to me.
More information about the Python-Dev
mailing list