[Python-ideas] Possible PEP 380 tweak

Guido van Rossum guido at python.org
Fri Oct 29 16:28:29 CEST 2010


On Thu, Oct 28, 2010 at 10:25 PM, Greg Ewing
<greg.ewing at canterbury.ac.nz> wrote:
> Guido van Rossum wrote:
>
>> I'd also like to convince you to change g.close() so that it captures
>> and returns the return value from StopIteration if it has one.
>
> Looking at this again, I find that I'm not really sure how
> this impacts PEP 380. The current expansion specifies that
> when a delegating generator is closed, the subgenerator's
> close() method is called, any value it returns is ignored,
> and GeneratorExit is re-raised.
>
> If that close() call were to return a value, what do you
> think should be done with it?

I went over that myself in detail and ended up deciding that for
"yield-from" nothing should be changed! The expansion in the PEP
remains the same.

But since this PEP also specifies "return value" it would be nice if
there was a convenient way to capture this value, and close seems to
be it. E.g.

def gen():
  total = 0
  try:
    while True:
      total += yield
  except GeneratorExit:
    return total

def main():
  g = gen()
  for i in range(100):
    g.send(i)
  print(g.close())

This would print the total computed by gen().

-- 
--Guido van Rossum (python.org/~guido)



More information about the Python-ideas mailing list