append on lists
Maric Michaud
maric at aristote.info
Tue Sep 16 08:48:16 EDT 2008
Le Tuesday 16 September 2008 14:23:25 Armin, vous avez écrit :
> Alex Marandon wrote:
> > Armin wrote:
> >> Duncan Booth wrote:
> >>
> >> The semantic of [1,2,3,4,7].append(c) and [1,2,3,4,7] + c
> >> (with c = [8,9]) is identical,
> >
> > No it's not, + doesn't alter its operands.
> >
> > >>> a = 1
> > >>> b = 2
> > >>> a + b
> >
> > 3
>
> That's not the point :)
It is, please try to understand it, in python all expressions that mutate an
object should return None, it's the case for
l.append(x)
l.sort()
l.reverse()
...
all expressions that return something, return a new object, it's the case for
1+2
1.__add__(2) (which is the same)
sorted(l)
l[i:j]
etc...
there are some noticeable exceptions :
For coding facilities, some APIs could return the modified part of the object,
ex : it = c.pop()
Returning the modifyied object itself is mostly considered bad style, because
it doesn't make clear if this the object or a copy. There is OTHO a use case
for this, for APIs that allow chaining of operations (don't find by memory
any example in stdlib, though), alike the ">>" operator in C++, but pyparsing
is a good example if I remember well. BTW, Pythoneers are not very fond of
that.
Finally, the very special case of augmented assignment operators :
x.__iadd__(y) which actually return the modified object, but this expression
isn't intended to be use by callers, refer to the manual to see a good
example of this, how one should implement __add__ and __iadd__ methods.
a += b
a = a + b
both are statments (doesn't evaluate to any object), but are not equivalent if
a is mutable.
>
> What's the value of 1.add(b)? None? Or 3 ??
> (if add works in the same way as append)
> a + b doesn't change a,b ... but a.add(b) -> a=3
> --
> http://mail.python.org/mailman/listinfo/python-list
--
_____________
Maric Michaud
More information about the Python-list
mailing list