Módulo 4 - Funções como objetos
Funções de ordem superior
10 min de leitura · por Cesar Gargiulo, revisado pela equipe ValorFinal e GuardiaSec · Atualizado em 01/07/2026
O que você vai aprender
- Definir o que é uma função de ordem superior.
- Escrever uma função que recebe outra função como argumento.
- Escrever uma função que devolve outra função.
- Reconhecer funções de ordem superior já presentes no Python.
Ouvir o resumo desta aula
Um recap de cerca de 2 minutos na voz do Valim, para ouvir no trânsito ou na academia.
Ler a transcrição do resumo
Resumo da aula: Funções de ordem superior.
Os objetivos desta aula. Definir o que é uma função de ordem superior. Escrever uma função que recebe outra função como argumento. Escrever uma função que devolve outra função. Reconhecer funções de ordem superior já presentes no Python.
Veja o essencial, parte por parte.
O que é ordem superior. Função de ordem superior é a que recebe ou devolve outra função.
Receber uma função, devolver uma função. sorted(lista, key=funcao) recebe uma função no key: é de ordem superior.
Fixando: ordem superior. O ganho de escrever funções de ordem superior é sempre o mesmo: menos repetição e mais flexibilidade.
Esse foi o resumo do essencial. Para se aprofundar, leia a aula completa e responda os exercícios.
O que é ordem superior
O nome intimida, mas a ideia é direta. Na aula anterior você viu que funções são valores. Se são valores, uma função pode receber outra função como argumento e pode devolver uma função como resultado. Toda função que faz uma dessas duas coisas é chamada de função de ordem superior. O termo apenas dá nome a um padrão que fica natural assim que você aceita que funções circulam como qualquer outro dado.
Por que isso é útil? Porque separa o que varia do que é fixo. Imagine que você precisa aplicar uma transformação a cada item de uma lista. A parte fixa é percorrer a lista e juntar os resultados. A parte que varia é qual transformação aplicar: dobrar, elevar ao quadrado, deixar em maiúsculas. Uma função de ordem superior recebe a transformação como argumento e cuida do resto. Você escreve o laço uma vez e reaproveita com qualquer operação, em vez de copiar o mesmo laço trocando só a linha do meio.
def aplicar_a_cada(funcao, lista):
resultado = []
for item in lista:
resultado.append(funcao(item))
return resultado
def quadrado(x):
return x * x
numeros = [1, 2, 3, 4]
print(aplicar_a_cada(quadrado, numeros)) # [1, 4, 9, 16]
print(aplicar_a_cada(abs, [-5, 3, -2])) # [5, 3, 2] (abs e embutida)aplicar_a_cada recebe uma função e a executa em cada item: o laço é escrito uma vez só.
Receber uma função, devolver uma função
Há dois lados na definição, e vale ver os dois. O primeiro, receber uma função, você acabou de ver: aplicar_a_cada aceita a transformação como argumento. Esse argumento costuma ser chamado de callback, porque quem escreveu a função de ordem superior decide o momento de chamá-lo de volta. O segundo lado é devolver uma função. Aqui uma função funciona como uma fábrica: você chama a fábrica com alguns parâmetros e recebe de volta uma nova função pronta, ajustada para aquilo que você pediu.
def criar_saudacao(saudacao):
def cumprimentar(nome):
return f"{saudacao}, {nome}!"
return cumprimentar # devolve a funcao interna
bom_dia = criar_saudacao("Bom dia")
ola = criar_saudacao("Olá")
print(bom_dia("Ana")) # Bom dia, Ana!
print(ola("Bruno")) # Olá, Bruno!criar_saudacao devolve uma função sob medida. Esse padrão vira closure na aula 5.
Fixando: ordem superior
O ganho de escrever funções de ordem superior é sempre o mesmo: menos repetição e mais flexibilidade. Você escreve a estrutura repetitiva uma vez, o laço, a montagem do resultado, e deixa um espaço configurável, a função que entra. Quem chama decide o comportamento sem tocar na estrutura. É a mesma lógica que faz o sorted da próxima aula ordenar por qualquer critério: ele cuida da ordenação e você entrega a função que diz o que comparar. A partir daqui, o Python fica bem mais expressivo.
Teste rápido
O que caracteriza uma função de ordem superior?
Perguntas frequentes
- Preciso decorar o termo função de ordem superior?
- O termo ajuda a conversar com outras pessoas e a ler documentação, mas o que importa é a ideia: uma função que trabalha com outras funções. Se você entende que dá para receber e devolver funções, já sabe o essencial, mesmo sem lembrar o nome exato.
- Qual a diferença entre callback e função de ordem superior?
- São dois lados da mesma cena. A função de ordem superior é a que recebe outra função; o callback é a função que você passa para ela executar. Em sorted(lista, key=len), sorted é a de ordem superior e len é o callback.
- Devolver uma função não é a mesma coisa que closure?
- Está muito próximo. Toda vez que uma função interna que você devolve usa uma variável da função externa, você tem um closure. A aula 5 aprofunda esse caso. Por ora, basta ver que uma função pode fabricar e devolver outra função.
- Isso deixa o código mais rápido?
- O ganho principal não é velocidade, é organização e reaproveitamento. Você escreve a estrutura repetitiva uma vez e troca só o comportamento. Em alguns casos o código fica um pouco mais enxuto, mas o objetivo é clareza e flexibilidade, não desempenho.
- Funções de ordem superior existem só no Python?
- Não. Elas aparecem em muitas linguagens, principalmente nas que tratam funções como valores. O Python torna o uso simples porque toda função já é um objeto, sem sintaxe especial para passar uma função adiante.
- Quando NÃO usar esse padrão?
- Quando ele deixa o código mais difícil de ler para um ganho pequeno. Se um laço simples resolve com clareza, prefira o laço. Funções de ordem superior brilham quando você repetiria a mesma estrutura com comportamentos diferentes; para um caso único, muitas vezes o direto é melhor.
Fontes
Seu progresso fica salvo neste aparelho. Assinantes sincronizam entre os aparelhos.