[Python-ideas] Possible PEP 380 tweak

Ron Adam rrr at ronadam.com
Fri Oct 29 06:25:46 CEST 2010



On 10/28/2010 08:17 PM, Nick Coghlan wrote:
> On Fri, Oct 29, 2010 at 1:04 AM, Guido van Rossum<guido at python.org>  wrote:
>> On Thu, Oct 28, 2010 at 5:44 AM, Nick Coghlan<ncoghlan at gmail.com>  wrote:
>>> Yep, we've basically agreed on that as the way forward as well. We
>>> have a small tweak to suggest for PEP 380 to avoid losing the return
>>> value from inner close() calls,
>>
>> This is my "gclose()" function, right? Or is there more to it?
>
> Yeah, the idea your gclose(), plus one extra tweak to the expansion of
> "yield from" to store the result of the inner close() call on a new
> GeneratorExit instance.
>
> To use a toy example:
>
>    # Even this toy framework needs a little structure
>    class EndSum(Exception): pass
>
>    def gsum():
>      # Sums sent values until EndSum or GeneratorExit are thrown in
>      tally = 0
>      try:
>        while 1:
>          tally += yield
>      except (EndSum, GeneratorExit):
>        pass
>      return x
>
>    def average_sums():
>      # Advances to a new sum when EndSum is thrown in
>      # Finishes the last sum and averages them all when GeneratorExit
> is thrown in
>      sums = []
>      try:
>        while 1:
>          sums.append(yield from gsum())
>      except GeneratorExit as ex:
>        # Our proposed expansion tweak is to enable the next line
>        sums.append(ex.args[0])
>      return sum(sums) / len(sums)

Nick, could you add a main() or calling routine?  I'm having trouble seeing 
the complete logic without that.

Cheers,
    Ron





More information about the Python-ideas mailing list