in place functions from operator module
python at rcn.com
Mon Aug 30 08:41:42 CEST 2010
On Aug 29, 8:33 am, Arnaud Delobelle <arno... at googlemail.com> wrote:
> ernest <nfdi... at gmail.com> writes:
> > Hi,
> > The operator module provides separate functions for
> > "in place" operations, such as iadd(), isub(), etc.
> > However, it appears that these functions don't really
> > do the operation in place:
> > In : a = 4
> > In : operator.iadd(a, 3)
> > Out: 7
> > In : a
> > Out: 4
> > So, what's the point? If you have to make the
> > assignment yourself... I don't understand.
> > Cheers,
> > Ernest
> That's because
> a += b
> is executed as:
> a = a.__iadd__(b)
> For immutable objects, (such as integers), a.__iadd__(b) returns a + b
> *and then* this value is assigned to a (or rather 'a' is bound to the
> value). So for immutables objects, iadd(a, b) is the same as a + b
> For mutable objects (such as lists), a.__iadd__(b) mutates the object
> *and then* returns self so that when the assignement is executed, 'a'
> will still be bound the the same object. E.g. if a = [1, 2] then
> a += 
> will first append 3 to the list and then reassign the list to 'a' (it is
> unnecessary in this case but if this step was omitted, the "in place"
> operators wouldn't work on immutables types).
This is an excellent explanation.
Perhaps, you can submit a documentation
patch for the operator module so this
doesn't get lost.
More information about the Python-list