|
Le funzioni in generale possono anche essere passate come argomento, ed è qui che la lambda torna particolarmente utile.
Un caso importante in cui è richiesta una funzione come argomento è l'ordinamento. Consideriamo il seguente caso. Creiamo una lista che contiene un elenco non ordinato di numeri, ed ordiniamola:
>>> l = [ 6, 9, 2, 4, 2, 1]
>>> m = l[:]
>>> m.sort()
>>> m
[1, 2, 2, 4, 6, 9]
Notare che abbiamo fatto la copia per evitare di ottenere di ordinare la lista originale.
Il metodo sort delle liste prende come argomento una funzione, che per default è cmp. Questa funzione prende due numeri e ritorna 0 se sono uguali, 1 se il primo è maggiore del secondo e -1 se il primo è minore del secondo. La sort segue un suo algoritmo interno e applica la funzione per ogni coppia di numeri da confrontare per scoprire quale viene prima.
Se vogliano ottenere per esempio un ordinamento inverso, dobbiamo definire una funzione analoga alla cmp, ma che ritorna 1 se il primo è minore del secondo, e -1 se il primo è maggiore del secondo. Il modo più facile per definire questo comportamento è scrivere "- cmp (x,y) ". Quindi ecco come possiamo ottenere l'ordinamento inverso:
>>> l = [ 6, 9, 2, 4, 2, 1]
>>> m = l[:]
>>> m.sort(lambda x,y: -cmp(x,y))
>>> m
[9, 6, 4, 2, 2, 1]
Notiamo che potevamo anche scrivere lambda x,y: cmp(y,x) ottenendo lo stesso effetto.
|