[Python-Dev] Re: Re: accumulator display syntax
Terry Reedy
tjreedy at udel.edu
Thu Oct 23 01:11:01 EDT 2003
"Guido van Rossum" <guido at python.org> wrote in message
news:200310230248.h9N2meb01254 at 12-236-54-216.client.attbi.com...
> It still suffers from my main problem with reduce(), which is not
its
> verbosity (far from it) but that except for some special cases
(mainly
> sum and product) I have to stand on my head to understand what it
> does. This is even the case for examples like
>
> reduce(lambda x, y: x + y.foo, seq)
>
> which is hardly the epitomy of complexity. Who here knows for sure
it
> shouldn't rather be
>
> reduce(lambda x, y: x.foo + y, seq)
>
> without going through an elaborate step-by-step execution?
I do and Raymond Hettinger should. Doc bug 821701 addressed this
confusion. I suggested the addition of
"The first (left) argument is the accumulator; the second
(right) is the update value from the sequence. The
accumulator starts as the initializer, if given, or as seq[0]. "
but don't know yet what Raymond actually did.
For remembering, the arg order corresponds to left associativity:
...(((a op b) op c) op d) ... .
For clarity, the updater should be written with real arg names:
lambda sum, item: sum + item.foo
Now sum.foo + item is pretty obviously wrong. I think it a mistake to
make the two args of the update function look symmetric when they are
not. Even if the same type, the first represents a cumulation of
several values (and the last return value) while the second is just
one (new) value.
Terry J. Reedy
More information about the Python-Dev
mailing list