Uma função é chamada de função de ordem superior se ela recebe outras funções como parâmetros ou retorna uma função como resultado. Podemos passar funções como argumentos e também podemos retornar funções. Tudo isso torna muito prático escrever código genérico que pode ser reutilizado em vários lugares.
A função sort() ou sorted(), por exemplo, é uma função de ordem superior. Podemos passar um argumento chamado key para ela, que será usado para determinar como a ordenação é feita. Podemos ter uma lista de tuplas e queremos ordenar essa lista com base na soma dos elementos das tuplas:
A função do() possui 3 argumentos — o primeiro número num1, o segundo número num2 e a operação que deve ser realizada nesses números. Na primeira chamada, informamos à função para usar a adição; na segunda, a subtração; e na última, a multiplicação.
Desafio
Dada uma lista de n triplos de números, você deve ordenar esses triplos pela sua soma. Assim, na lista final, se olharmos para a soma dos triplos, o resultado é uma sequência não decrescente.
A primeira linha da entrada contém um único inteiro n — o número de triplos. As próximas n linhas contêm 3 inteiros separados por espaços.
O programa deve imprimir n linhas — a lista resultante de triplos. Cada linha deve conter 3 números separados por espaços. Se houver dois triplos com a mesma soma, o primeiro que aparece na entrada deve aparecer primeiro na saída (as funções sort e sorted mantêm essa ordem — isso é chamado de ordenação estável).