Funções como sort, max ou min podem receber argumentos como key=, que são funções e podem determinar seu comportamento. Isso torna as funções embutidas sort e max muito mais poderosas e genéricas. Elas podem ser usadas em muitos mais cenários do que se apenas comparassem os valores em si sem o argumento key=.
Podemos criar nossas próprias funções de ordem superior também:
Aqui, passamos diferentes funções como f para a função de ordem superior modify. A função modify cria uma nova lista a partir da lista de entrada e retorna o resultado. Note que podemos até passar uma função como str para a função. Assim, cada elemento da lista de entrada terá aplicada a função str() - str(2), str(0), str(1).
Desafio
Implemente uma versão genérica da função sum chamada generic_sum, que receberá uma coleção como primeiro argumento (pode ser uma lista, um conjunto ou uma lista de tuplas) e uma função como segundo argumento que obtém um número de cada elemento da coleção.