[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