Python ha due tipi di ordinamenti: un metodo di ordinamento (o "funzione membro") e una funzione di ordinamento . Il metodo di ordinamento opera sul contenuto dell'oggetto denominato: pensalo come un'azione che l'oggetto sta eseguendo per riordinare se stesso . La funzione di ordinamento è un'operazione sui dati rappresentati da un oggetto e restituisce un nuovo oggetto con lo stesso contenuto in un ordine ordinato.
Dato un elenco di numeri interi chiamati ll'elenco stesso verrà riordinato se chiamiamo l.sort():
>>> l = [1, 5, 2341, 467, 213, 123]
>>> l.sort()
>>> l
[1, 5, 123, 213, 467, 2341]
Questo metodo non ha valore di ritorno. E se provassimo ad assegnare il risultato di l.sort()?
>>> l = [1, 5, 2341, 467, 213, 123]
>>> r = l.sort()
>>> print(r)
None
rora non equivale a nulla. Questo è uno di quei strani, un po 'fastidiosi dettagli che un programmatore è probabile a dimenticare dopo un periodo di assenza dal Python (che è il motivo per cui sto scrivendo questo, quindi io non dimentico di nuovo).
La funzione sorted(), d'altra parte, non farà nulla al contenuto di l, ma restituirà un nuovo elenco ordinato con gli stessi contenuti di l:
>>> l = [1, 5, 2341, 467, 213, 123]
>>> r = sorted(l)
>>> l
[1, 5, 2341, 467, 213, 123]
>>> r
[1, 5, 123, 213, 467, 2341]
Tieni presente che il valore restituito non è una copia approfondita , quindi fai attenzione alle operazioni con effetti collaterali sugli elementi contenuti nell'elenco come al solito:
>>> spam = [8, 2, 4, 7]
>>> eggs = [3, 1, 4, 5]
>>> l = [spam, eggs]
>>> r = sorted(l)
>>> l
[[8, 2, 4, 7], [3, 1, 4, 5]]
>>> r
[[3, 1, 4, 5], [8, 2, 4, 7]]
>>> spam.sort()
>>> eggs.sort()
>>> l
[[2, 4, 7, 8], [1, 3, 4, 5]]
>>> r
[[1, 3, 4, 5], [2, 4, 7, 8]]