Una funzione si chiama funzione di ordine superiore se accetta altre funzioni come parametri o restituisce una funzione come output. Possiamo passare funzioni come argomenti e possiamo anche restituire funzioni. Tutto ciò rende molto conveniente scrivere codice generico che può essere riutilizzato in più punti.
La funzione sort() o sorted(), ad esempio, è una funzione di ordine superiore. Possiamo passarle un argomento chiamato key, che verrà utilizzato per determinare come eseguire l'ordinamento. Possiamo avere una lista di tuple e voler ordinare la lista basandoci sulla somma degli elementi delle tuple:
La funzione do() ha 3 argomenti: il primo numero num1, il secondo numero num2 e l'operazione che deve essere eseguita su questi numeri. Nella prima chiamata, diciamo alla funzione di usare l'addizione, nella seconda di usare la sottrazione e nell'ultima la moltiplicazione.
Sfida
Data una lista di n terne di numeri, ti viene chiesto di ordinare queste terne in base alla loro somma. Quindi, nella lista finale, se guardiamo la somma delle terne, il risultato è una sequenza non decrescente.
La prima riga dell'input contiene un singolo intero n - il numero di terne. Le successive n righe contengono 3 interi separati da spazi.
Il programma dovrebbe stampare n righe - la lista risultante delle terne. Ogni riga dovrebbe contenere 3 numeri separati da spazi. Se ci sono due terne con la stessa somma, la prima che appare nell'input dovrebbe apparire per prima nell'output (le funzioni sort e sorted mantengono quell'ordine - questo si chiama ordinamento stabile).