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.

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.