Módulo 4 - Funções como objetos
Funções são valores
10 min de leitura · por Cesar Gargiulo, revisado pela equipe ValorFinal e GuardiaSec · Atualizado em 01/07/2026
O que você vai aprender
- Entender que uma função é um objeto de primeira classe no Python.
- Diferenciar referenciar a função (sem parênteses) de chamá-la (com parênteses).
- Guardar funções em variáveis, listas e dicionários.
- Passar uma função como argumento para outra função.
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 são valores.
Os objetivos desta aula. Entender que uma função é um objeto de primeira classe no Python. Diferenciar referenciar a função (sem parênteses) de chamá-la (com parênteses). Guardar funções em variáveis, listas e dicionários. Passar uma função como argumento para outra função.
Veja o essencial, parte por parte.
Chamar a função ou apontar para ela. No Python, toda função é um objeto: pode ir para uma variável, lista ou dicionário.
Funções dentro de listas e dicionários. Se uma função é um valor, ela cabe em qualquer lugar que guarda valores.
Fixando: função é valor. Escrever operacoes = {'+': somar()} coloca o RESULTADO, não a função (e ainda dá erro por falta de argumentos).
Esse foi o resumo do essencial. Para se aprofundar, leia a aula completa e responda os exercícios.
Chamar a função ou apontar para ela
Até aqui você usou funções de um jeito só: escreveu o nome, abriu parênteses, passou os argumentos e recebeu um resultado. Faz sentido, é para isso que elas existem. Mas há um detalhe que muda o nível do seu código: no Python, a própria função é um valor. Ela é um objeto guardado na memória, exatamente como o número 42 ou o texto Ana. E, como todo objeto, ela pode ser guardada em uma variável, colocada dentro de uma lista, usada como valor de um dicionário e passada para outra função.
O segredo está nos parênteses. Quando você escreve dobrar(3), o Python executa a função dobrar com o argumento 3 e devolve o resultado. Quando você escreve apenas dobrar, sem parênteses, não executa nada: você está apontando para o objeto função. É como a diferença entre discar um número de telefone e apenas anotar o número num papel. Anotar o número não faz o telefone tocar. Guardar a função numa variável não a executa, só dá a ela um segundo nome.
def dobrar(x):
return x * 2
# Referenciar: um segundo nome para a MESMA funcao
operacao = dobrar
print(dobrar(5)) # 10
print(operacao(5)) # 10 (mesma funcao, outro nome)
print(dobrar) # <function dobrar at 0x...>
print(type(dobrar)) # <class 'function'>Sem parênteses, o nome aponta para o objeto função; com parênteses, executa.
Funções dentro de listas e dicionários
Se uma função é um valor, ela cabe em qualquer lugar que guarda valores. Você pode montar uma lista de funções e percorrê-la com um laço, executando cada uma. Mais útil ainda, pode usar um dicionário para escolher qual função rodar a partir de um texto, uma técnica limpa que substitui uma pilha de condições. Em vez de um encadeado de se, senão se, senão, o dicionário faz o papel de um mapa que liga um nome a uma ação.
def somar(a, b):
return a + b
def subtrair(a, b):
return a - b
def multiplicar(a, b):
return a * b
# Dicionario que liga um texto a uma funcao
operacoes = {
"+": somar,
"-": subtrair,
"*": multiplicar,
}
escolha = "*"
funcao = operacoes[escolha] # pega a funcao, ainda nao executa
print(funcao(6, 7)) # 42 (agora executa)Um dicionário de funções substitui um encadeado longo de condições.
Sem funções como valores
- Um if/elif para cada operação
- Difícil de estender: mexer no encadeado
- Lógica de escolha misturada com a lógica de cálculo
- Repetição de estrutura em cada ramo
Com funções como valores
- Um dicionário que liga texto a função
- Fácil de estender: só adicionar uma chave
- Escolha separada do cálculo, cada um no seu lugar
- Uma linha para executar a função escolhida
Fixando: função é valor
Guarde a imagem central desta aula: uma função é um objeto que você pode carregar de um lado para o outro. Onde cabe um número, cabe uma função. Onde você pode guardar um texto, pode guardar uma função. A única regra a não esquecer é a dos parênteses. Sem eles, você segura a função na mão; com eles, você a executa. Essa distinção parece pequena, mas é o alicerce de tudo que vem a seguir no módulo, das funções de ordem superior aos closures.
Teste rápido
Qual a diferença entre escrever dobrar e dobrar(3)?
Perguntas frequentes
- O que significa dizer que a função é um objeto de primeira classe?
- Significa que a linguagem trata a função como qualquer outro valor: você pode guardá-la em uma variável, colocá-la em uma lista ou dicionário, passá-la como argumento e recebê-la como retorno. No Python isso vale para toda função, sem exceção.
- Por que operacao = dobrar não executa a função?
- Porque não há parênteses. Escrever apenas dobrar aponta para o objeto função. A execução só acontece quando você adiciona os parênteses e os argumentos, como operacao(5). Antes disso, operacao é apenas um segundo nome para a mesma função.
- Guardar a função numa variável cria uma cópia dela?
- Não. A variável passa a apontar para a mesma função na memória. São dois nomes para o mesmo objeto. Se você chamar por qualquer um dos nomes, executa exatamente a mesma função. Isso é eficiente e não duplica nada.
- Quando vale a pena usar um dicionário de funções?
- Quando você escolheria a ação a partir de um valor (um texto, uma opção de menu) e teria um encadeado longo de if/elif. O dicionário liga cada chave a uma função, deixa o código mais curto e permite adicionar novas ações só acrescentando uma chave, sem mexer na lógica existente.
- Posso colocar funções da própria biblioteca padrão numa lista?
- Sim. Funções como len, max, min, str e int também são objetos e cabem numa lista ou dicionário. Você pode montar [len, str.upper, abs] e chamar cada uma no laço. A regra dos parênteses é a mesma: sem eles, você referencia; com eles, executa.
- Isso é o mesmo que ponteiro de função de outras linguagens?
- A ideia é parecida com a de tratar a função como um valor que se passa adiante, mas no Python é mais simples e seguro: você lida com o objeto função direto, sem endereços de memória expostos nem sintaxe especial. Basta usar o nome sem parênteses.
Fontes
Seu progresso fica salvo neste aparelho. Assinantes sincronizam entre os aparelhos.