[Python-3000] Python 3000 Status Update (Long!)
Aurélien Campéas
aurelien.campeas at logilab.fr
Fri Jun 22 11:46:20 CEST 2007
On Fri, Jun 22, 2007 at 07:11:14PM +1000, Nick Coghlan wrote:
> Bill Janssen wrote:
> >>> It should amount to "map(+, operands)".
> >> Or, to be pedantic, this:
> >>
> >> reduce(lambda x, y: x.__add__(y), operands)
> >
> > Don't you mean:
> >
> > reduce(lambda x, y: x.__add__(y), operands[1:], operands[0])
>
> This is a nice illustration of a fairly significant issue with the
> usability of reduce: two attempts to rewrite sum() using reduce(), and
> both of them are buggy. Neither of the solutions above can correctly
Maybe the specification/documentation is missing some phrasing like that :
"The function must also be able to accept no arguments." (taken from
another language spec.) ?
Better fix the documentation than blame reduce. Of course, reduce was
taken from Lisp, where lambda is not castrated and thus allows one to
write the no-argument case with more ease. Castrated lambdas limit the
usefulness of reduce *in python*, not in general.
Regards,
Auélien.
> handle an empty sequence:
>
> .>>> operands = []
> .>>> reduce(lambda x, y: x.__add__(y), operands).
> Traceback (most recent call last):
> File "<stdin>", line 1, in <module>
> TypeError: reduce() of empty sequence with no initial value
> .>>> reduce(lambda x, y: x.__add__(y), operands[1:], operands[0])
> Traceback (most recent call last):
> File "<stdin>", line 1, in <module>
> IndexError: list index out of range
>
> Cheers,
> Nick.
>
> --
> Nick Coghlan | ncoghlan at gmail.com | Brisbane, Australia
> ---------------------------------------------------------------
> http://www.boredomandlaziness.org
> _______________________________________________
> Python-3000 mailing list
> Python-3000 at python.org
> http://mail.python.org/mailman/listinfo/python-3000
> Unsubscribe: http://mail.python.org/mailman/options/python-3000/aurelien.campeas%40logilab.fr
More information about the Python-3000
mailing list