Parâmetros e argumentos
Veja como enviar informações para dentro de uma função.
Na lição anterior, aprendemos a criar funções simples. Mas aquelas funções sempre faziam exatamente a mesma coisa, pois não tinham como receber informações de fora.
Agora vamos aprender como passar informações para dentro de uma função. É aí que as funções ficam realmente poderosas e versáteis.
A diferença entre parâmetro e argumento
Antes de tudo, uma distinção rápida que costuma gerar confusão:
- Parâmetro é a variável que você declara na definição da função — é como um espaço reservado, um formulário em branco esperando ser preenchido.
- Argumento é o valor real que você passa quando chama a função — é o preenchimento do formulário.
# nome é um PARÂMETRO
def saudar(nome):
print("Olá,", nome + "!")
# Maria é o ARGUMENTO
saudar("Maria")
Na prática, muita gente usa as duas palavras de forma intercambiável no dia a dia, e não tem problema. O importante é entender o conceito.
Criando uma função com parâmetros
Imagine uma função de saudação. Sem parâmetros, ela só consegue dizer "Olá!" para todo mundo do mesmo jeito. Com um parâmetro, ela pode cumprimentar cada pessoa pelo nome:
def saudar(nome):
print("Olá,", nome + "! Seja bem-vindo(a)!")
saudar("Ana")
saudar("Carlos")
saudar("Beatriz")
Saída:
Olá, Ana! Seja bem-vindo(a)!
Olá, Carlos! Seja bem-vindo(a)!
Olá, Beatriz! Seja bem-vindo(a)!
O parâmetro nome funciona como uma variável local — ela só existe dentro da função, e a cada chamada recebe o valor do argumento passado.
Múltiplos parâmetros
Uma função pode receber quantos parâmetros precisar. É só separá-los com vírgulas, tanto na definição quanto na chamada.
def apresentar(nome, idade, cidade):
print("Nome:", nome)
print("Idade:", idade, "anos")
print("Cidade:", cidade)
print("---")
apresentar("Fernanda", 28, "São Paulo")
# Não precisa ser tudo na mesma linha! Se você tiver vários argumentos, também pode fazer assim:
apresentar(
"Lucas",
35,
"Curitiba"
)
Saída:
Nome: Fernanda
Idade: 28 anos
Cidade: São Paulo
---
Nome: Lucas
Idade: 35 anos
Cidade: Curitiba
---
Atenção à ordem! Ao chamar a função, os argumentos são associados aos parâmetros na mesma ordem em que aparecem. Se você chamar
apresentar("Curitiba", 28, "Fernanda"), o Python vai entender que o nome é "Curitiba" e a cidade é "Fernanda", sem reclamar, mas com resultado errado!
Para evitar este problema, podemos fazer um "mapeamento" para o Python, assim em vez de deixar que o Python utilize apenas a ordem para entender os argumentos, nós dizemos o que é o que:
def apresentar(nome, idade, cidade):
print("Nome:", nome)
print("Idade:", idade, "anos")
print("Cidade:", cidade)
print("---")
# Mapeando à qual parâmetro cada argumento corresponde
apresentar(
idade=28, # o valor 28 corresponde ao parâmetro idade e assim por diante
nome="Fernanda",
cidade="São Paulo"
)
apresentar(
nome="Lucas",
cidade="Curitiba",
idade=35
)
A saída será a mesma:
Nome: Fernanda
Idade: 28 anos
Cidade: São Paulo
---
Nome: Lucas
Idade: 35 anos
Cidade: Curitiba
---
Isso se chama argumento nomeado (ou, no inglês, keyword argument). Ao usar parametro=valor, você está dizendo ao Python exatamente qual parâmetro aquele valor se refere.
Parâmetros com valor padrão
Às vezes, faz sentido que um parâmetro já venha com um valor pré-definido, caso o usuário não informe nada. Isso é chamado de valor padrão (ou default value).
Pense em um formulário de cadastro online: o campo "Idioma" já vem preenchido com "Português" por padrão. Você pode mudar, mas se não mudar, o Português já está lá.
Para definir um valor padrão, usamos = diretamente na declaração do parâmetro:
def saudar(nome, idioma="português"):
if idioma == "português":
print("Olá,", nome + "!")
elif idioma == "inglês":
print("Hello,", nome + "!")
elif idioma == "espanhol":
print("¡Hola,", nome + "!")
# Chamando sem informar o idioma — usa o padrão "português"
saudar("Mariana")
# Chamando com um idioma específico
saudar("John", "inglês")
saudar("Carlos", "espanhol")
Saída:
Olá, Mariana!
Hello, John!
¡Hola, Carlos!
Regra importante: parâmetros com valor padrão devem sempre vir depois dos parâmetros sem valor padrão. Ou seja,
def funcao(a, b=10)é válido, masdef funcao(a=10, b)gera um erro de sintaxe.
Exemplo prático: Calculadora de desconto
Vamos juntar tudo o que aprendemos: múltiplos parâmetros e valor padrão.
def calcular_preco_final(preco, desconto=10):
valor_desconto = preco * (desconto / 100)
preco_final = preco - valor_desconto
print(f"Preço original: R$ {preco:.2f}")
print(f"Desconto aplicado: {desconto}% (R$ {valor_desconto:.2f})")
print(f"Preço final: R$ {preco_final:.2f}")
print("---")
# Sem informar o desconto — usa 10% como padrão
calcular_preco_final(200)
# Informando um desconto diferente
calcular_preco_final(350, 25)
Saída:
Preço original: R$ 200.00
Desconto aplicado: 10% (R$ 20.00)
Preço final: R$ 180.00
---
Preço original: R$ 350.00
Desconto aplicado: 25% (R$ 87.50)
Preço final: R$ 262.50
---
Dica: o que é o
:.2fjunto com a variável que vai ser impressa (ex.:{preco:.2f})? É para indicar a precisão de casas decimais que desejamos exibir. Como estamos fazendo uma divisão,valor_desconto = preco * (desconto / 100), é possível que tenhamos resultados quebrados, com várias casas depois da vírgula. O:.2flimita à apenas 2 casas decimais na exibição. Ele não altera o valor na variável, ele apenas ajusta a exibição no print().
O que aprendemos nesta lição
Nesta lição, você aprendeu que:
- Parâmetro é a variável declarada na definição da função; argumento é o valor passado na chamada.
- Parâmetros permitem que a função receba informações de fora e trabalhe com elas.
- Uma função pode ter múltiplos parâmetros, separados por vírgula — e a ordem dos argumentos na chamada importa.
- Podemos definir valores padrão para parâmetros usando
=na declaração, tornando esses parâmetros opcionais. - Parâmetros com valor padrão devem sempre vir depois dos parâmetros sem valor padrão.