On Jul 11, 9:19 pm, Thomas Jollans <tho...@jollans.com> wrote: > On 07/11/2010 05:59 PM, dhruvbird wrote: > > > Why doesn't python's list append() method return the list itself? For > > that matter, even the reverse() and sort() methods? > > I found this link (http://code.google.com/edu/languages/google-python- > > class/lists.html) which suggests that this is done to make sure that > > the programmer understands that the list is being modified in place, > > Yes! > > > but that rules out constructs like: > > ([1,2,3,4].reverse()+[[]]).reverse() > > No! > > you can either approach this by imperatively modifying a list in-place: > > L = [1,2,3,4] > L.reverse() > L.append([]) > L.reverse() > > Or you can use a more functional style: > > L2 = reversed(reversed([1,2,3,4]) + [[]])
Okay, but this assumes that I have reversed/sorted/etc... type of functions for all member functions that mutate the container. Also, as Nathan mentioned, reversed returns an iterator, whereas sorted returns a list. This asymmertic behaviour is a bit unnerving. > > (or ([1,2,3,4][::-1]+[[]])[::-1], if you like that kind of thing) > > Imagine list.reverse and list.append *did* return self: > > L1 = [1,2,3,4] > L2 = L1.reverse().append([]).reverse() > > would you expect, after this code, that (L1 == L2) and (L1 is L2)? I > think it would surprise a lot of people. Better clearly separate > modifying an object and functionally processing an object. I think this is a fair call. Honestly, I wouldn't expect them to be the same. However, there are cases when I want to be able to write down my intent in one line. Much like f(g(h(x))). On a side note, is there any other way to append to a list using slices (apart from the one below): x[len(x):len(x)] = [item to append] And while we are talking about python here, why does this statement: y = x[:0] = [100] behave the way it does? I mean everything except for the last value is assigned to the last value rather than the assignments following the chain and every item getting its succeeding item's reference? Regards, -Dhruv. -- http://mail.python.org/mailman/listinfo/python-list