[Python-ideas] Proto-PEP on a 'yield from' statement
Carl Johnson
carl at carlsensei.com
Sat Feb 14 02:57:30 CET 2009
Greg Ewing wrote:
> Antoine Pitrou wrote:
>
> > The problem I can see is that in normal iteration forms (e.g. a
> "for" loop), the
> > argument to StopIteration is ignored. Therefore, a generator
> executing such a
> > return statement and expecting the caller to use the return value
> wouldn't be
> > usable in normal iteration contexts.
>
> How is this different from an ordinary function returning a
> value that is ignored by the caller?
>
> It's up to the caller to decide whether to use the return
> value. If it wants the return value, then it has to either
> use a 'yield from' or catch the StopIteration itself and
> extract the value.
I think there is a difference. I were to
>>> def my_gen():
... yield 1
... return 2 #or "return finally 2" or whatever
I would would be very surprised at the result when putting it into a
for-loop:
>>> for i in my_gen():
... print(i)
...
1
>>>
Where did the two go? Why did it disappear? Well, the answer is that
the for-loop body ignored it, the same way the None emitted by a
mutating function gets ignored. But that answer doesn't seem very
compelling to me, just confusing.
-1 for returning from a generator.
-- Carl
More information about the Python-ideas
mailing list