[Python-Dev] inline sort option

Raymond Hettinger python at rcn.com
Thu Oct 16 13:49:57 EDT 2003


 [Tim Peters]
> > That said, since we're having a fire sale on optional sort arguments
in
> 2.4,
> > I wouldn't oppose an optional Boolean argument you could explicit
set to
> > have x.sort() return x.  For example,

[Michael Chermside]
> I just wanted to call everyone's attention to the fact that Tim may
> (again... <sigh>) have come up with a decent idea.
> 
> Seriously... Guido (and apparently Tim and I too) insist that
aList.sort()
> must return None since it mutates the list. Meanwhile, Kevin, Barry,
and
> perhaps others want to be able to write
> aList.sort().reverse().chainMoreHere().

Are you proposing something like:

    print mylist.sort(inplace=False)  # prints a new, sorted list while
                                      # leaving the original list intact


which would be implemented something like this:

    def inlinesort(alist, *args, **kwds):
        newref = alist[:]
        newref.sort(*args, **kwds)
        return newref


If that is what you're after, I think it is a good idea.  It avoids the
perils of mutating methods returning self.  It is explicit and pleasing
to write:

    for elem in mylist.sort(inplace=False):
        . . .

It is extra nice in a list comprehension:

    peckingorder = [d.name for d in duck.sort(key=seniority,
inplace=False)]


Instead of "inplace=False", an alternative is "inline=True".



Raymond Hettinger




More information about the Python-Dev mailing list