Módulo 3 - Funções avançadas

Parâmetros com valor padrão

10 min de leitura · por Cesar Gargiulo, revisado pela equipe ValorFinal e GuardiaSec · Atualizado em 01/07/2026

O que você vai aprender

  • Definir parâmetros com valor padrão para tornar argumentos opcionais.
  • Entender por que parâmetros com padrão vêm depois dos obrigatórios.
  • Chamar a mesma função de várias formas, usando ou não o padrão.
  • Escolher valores padrão que façam sentido e evitem repetição.

O que é um valor padrão

No Básico você criou funções em que todo parâmetro precisava ser informado. Se a função pedia dois valores, você tinha que passar os dois, sempre. Muitas vezes, porém, existe um valor que serve na maioria dos casos. Uma função que formata dinheiro quase sempre usa Real. Uma que cumprimenta quase sempre diz Olá. Repetir esse valor a cada chamada é chato e abre espaço para erro. O parâmetro com valor padrão resolve isso: você define o valor combinado uma vez, na função, e quem chama só informa quando quer algo diferente.

def saudar(nome, saudacao="Olá"):
    return f"{saudacao}, {nome}!"

print(saudar("Ana"))            # Olá, Ana!
print(saudar("Bruno", "Bom dia")) # Bom dia, Bruno!

A mesma função serve para o caso comum e para o caso especial, sem duplicar código.

Repare que saudar foi chamada de duas formas com a mesma definição. Na primeira, só o nome foi informado e o Python completou com Olá. Na segunda, quem chamou passou a saudação e o padrão ficou de lado. Um único parâmetro padrão dobrou a flexibilidade da função sem nenhuma linha a mais. É esse ganho, multiplicado por vários parâmetros, que deixa as funções realmente reaproveitáveis.

Por que a ordem dos parâmetros importa

Existe uma regra firme: todo parâmetro com valor padrão precisa vir depois dos parâmetros sem padrão. O motivo é lógico. O Python casa os argumentos que você passa com os parâmetros na ordem em que aparecem. Se um parâmetro opcional viesse antes de um obrigatório, o interpretador não teria como saber qual valor pertence a qual, e o programa ficaria ambíguo. Por isso o Python nem deixa: tentar definir assim dá erro já na leitura do arquivo.

# Errado: parametro com padrao antes de um sem padrao
def formatar(moeda="BRL", valor):
    return f"{moeda} {valor:.2f}"
# SyntaxError: non-default argument follows default argument
# O Python recusa o arquivo inteiro antes de rodar.

Padrão antes de obrigatório é erro de sintaxe: o Python nem executa.

def formatar(valor, moeda="BRL"):
    return f"{moeda} {valor:.2f}"

print(formatar(19.9))          # BRL 19.90
print(formatar(19.9, "USD"))   # USD 19.90

Certo: o obrigatório (valor) primeiro, o opcional (moeda) depois.

Fixando parâmetros padrão

Antes de seguir, vale amarrar a ideia. Parâmetros padrão existem para o caso comum: você define o valor mais provável uma vez e deixa quem chama sobrescrever quando precisa. A ordem obrigatória depois de opcional não é capricho, é o que permite ao Python casar cada argumento com o parâmetro certo sem ambiguidade. Guardando esses dois pontos, você já escreve funções bem mais convenientes de usar.

Teste rápido

Por que def formatar(moeda="BRL", valor) dá erro no Python?

Perguntas frequentes

Posso ter vários parâmetros com valor padrão na mesma função?
Pode, quantos quiser, desde que todos venham depois dos parâmetros obrigatórios. Por exemplo, def criar(nome, ativo=True, nivel=1) tem dois padrões. Quem chama pode informar nenhum, um ou os dois, na ordem em que aparecem.
O valor padrão é calculado toda vez que chamo a função?
Não. O valor padrão é avaliado uma única vez, quando a função é definida, e reaproveitado em todas as chamadas. Para números e textos isso não causa problema. Para valores mutáveis, como listas, causa a armadilha que a aula 4 deste módulo mostra em detalhe.
Qual a diferença entre parâmetro e argumento?
Parâmetro é o nome que aparece na definição da função, como saudacao em def saudar(nome, saudacao="Olá"). Argumento é o valor concreto que você passa na chamada, como "Bom dia" em saudar("Bruno", "Bom dia"). Os termos são próximos e às vezes usados como sinônimos.
Posso usar None como valor padrão?
Sim, e é uma prática muito comum. None é imutável e serve como sinal de que nada foi informado, deixando o corpo da função decidir o que fazer. Na aula sobre padrão mutável você verá que None é justamente a solução recomendada para padrões que seriam lista ou dicionário.
Se eu não passar um argumento obrigatório, o que acontece?
O Python levanta um TypeError informando que faltou um argumento, como missing 1 required positional argument. Parâmetros sem valor padrão precisam sempre ser informados. Só os que têm padrão podem ser omitidos.
Dá para pular um parâmetro padrão do meio e informar só o de trás?
Por posição não, porque o Python casa na ordem. Mas usando o nome do parâmetro na chamada, sim: você informa apenas nivel=3 e deixa o do meio no padrão. Essa é a ponte para a próxima aula, sobre argumentos nomeados.

Fontes

Seu progresso fica salvo neste aparelho. Assinantes sincronizam entre os aparelhos.