At 05:07 AM 9/30/2006, Liam Clarke wrote:
>Dick Moores wrote:
> > At 03:22 AM 9/30/2006, Liam Clarke wrote:
> >> Dick Moores wrote:

> >> A Python list sort is destructive, as you can see - it has modified
> >> lst. So, to emphasise that it is destructive, it returns None. You'll
> >> find this in most destructive methods and functions in Python.
> >
> > OK, but returning the new list would seem to make more sense. Is the
> > reason sort() doesn't, really only that it is better to emphasize that
> > it is destructive?
>
>Hi Dick,
>
>According to the guy who runs Python, yup. Got to remember the downside
>to destructive functions is that everything in Python is a reference.
>For example:
>
>  >>> a = [3,2,1]
>  >>> b = a
>  >>> b.sort()
>  >>> print a
>[1, 2, 3]
>
>If you could use
>
>y = x.sort()
>
>to get a copy of the sorted list, you'd find that subtle bugs would
>appear and frustrate you. In functional languages like Common Lisp or
>Scheme, destructive functions are very clearly marked as such, (in
>Scheme, they use exclamation marks - (sort! x) to indicate a destructive
>version of (sort x).) as a key part of the functional paradigm is
>reducing side effects.
>
>I believe sorting in place has performance advantages too.
>
>It's covered in the official FAQ:
>
>http://www.python.org/doc/faq/general/#why-doesn-t-list-sort-return-the-sorted-list

Thanks for the further enlightenment, Liam.

Dick



_______________________________________________
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor

Reply via email to