[Tutor] could somebody please explain...
Steven D'Aprano
steve at pearwood.info
Wed Oct 1 04:16:56 CEST 2014
On Wed, Oct 01, 2014 at 01:58:16AM +0100, Alan Gauld wrote:
> On 30/09/14 23:54, Clayton Kirkwood wrote:
> >I don't understand the multiplicity of some tools. Namely, why is there a
> >'a+b', operator.add(a,b), operator.__add__(a,b), operator.iadd(a,b),
> >operator.__iadd__(a,b) and their related operators?
>
> The operator module is there largely to allow you to pass
> operations to functions that take functions as parameters.
> For example map() which applies a function to a collection.
>
> total = map(operator.add, [1,2,3,4,5,6])
>
> is the same result as
>
> total = sum([1,2,3,4,5,6])
No, you're thinking of reduce(), not map().
reduce() takes a function and applies it all of the items, pairwise,
gradually reducing the result down to a single value. map() takes a
function and applies it to each of the items individually, returning a
new list.
[...]
> The operator module has functions representing most
> of the builtin operations in Python.
>
> I'm not really sure why it implements the dunder methods
> (eg operatotor.__add__()) corresponding to the operations though.
> I'm sure somebody else can provide a good explanation...
They're just aliases. According to the documentation, the "official"
versions are operator.__add__, etc. with the underscore-less versions
just given for convenience. But in practice everybody uses the
non-underscore versions.
My advice is to ignore the operator.__add__ and similar
double-underscore versions. They're longer to type, don't add any
additional value, and in fact are actually misleading since they don't
directly call the dunder methods.
--
Steven
More information about the Tutor
mailing list