Parâmetros de Funções em Python - Argumentos Posicionais e Nomeados
- #Funções
- #Python
- #Fundamentos
Neste artigo, exploraremos os principais tópicos sobre parâmetros de funções em Python, com foco em argumentos posicionais e nomeados, acompanhados de alguns exemplos práticos.
- Argumentos Posicionais : São aqueles passados na ordem em que os parâmetros foram definidos na função.
def mensagem(nome, mensagem):
print(f"{mensagem}, {nome}!")
mensagem("Maria", "Bom dia") # Bom dia, Maria!
Aqui, "Maria"
é atribuído a nome
e "Bom dia"
a mensagem
.
- Argumentos Nomeados (Keyword Arguments) : São passados explicitamente com o nome do parâmetro, tornando a ordem irrelevante:
def mensagem(nome, mensagem):
print(f"{mensagem}, {nome}!")
mensagem(mensagem="Boa noite", nome="Maria") # Boa noite, Maria!
Uma vantagem é a facilidade da leitura e impedir erros ao passar muitos argumentos.
- Combinando argumentos Posicionais e Nomeados : É possível a combinação entre eles na mesma chamada de função, mas os argumentos posicionais devem vir antes dos nomeados.
def mensagem(nome, mensagem):
print(f"{mensagem}, {nome}!")
mensagem("Maria", mensagem="Olá") # Olá, Maria! # "Maria é posicional" e mensagem="Olá" e nomeado.
🚨 Se invertermos a ordem:
def mensagem(nome, mensagem):
print(f"{mensagem}, {nome}!")
mensagem(mensagem="Olá", "Maria") # ❌ Erro de sintaxe!
File "<ipython-input-2-334f8daafea8>", line 1
mensagem(mensagem="Olá", "Maria")
^
SyntaxError: positional argument follows keyword argument
- Valores Padrão em Parâmetros (Default Arguments) : Parâmetros que têm um valor padrão definido na função, tornando-os opcionais.
def mensagem(nome, mensagem="Olá"):
print(f"{mensagem}, {nome}!")
mensagem("João") # Olá, João!
mensagem("Ana", "Oi") # Oi, Ana!
- Argumentos Variáveis (
*args
e**kwargs
) : Quando esses são definidos, o método recebe os valores como tupla e dicionário respectivamente.
- *args permite um número variável de argumentos posicionais:
def somar(*numeros):
return sum(numeros)
print(somar(1, 2, 3, 4)) # Resultado => 10
- **kwargs aceita múltiplos argumentos nomeados:
def mostrar_info(**dados):
for chave, valor in dados.items():
print(f"{chave}: {valor}")
mostrar_info(nome="Lucas", idade=30, cidade="São Paulo")
# Resultado
nome: Lucas
idade: 30
cidade: São Paulo
- Parâmetros especiais asterisco
*
e barra/
:
Nesta estrutura acima:
- Os dois primeiros parâmetros antes da barra
/
,pos1
epos2
devem ser somente argumentos posicionais. - Os parâmetros logo após a barra
/
, podem ser argumentos posicionais ou nomeados. - Os parâmetros logo após o asterisco
*
, devem ser somente argumentos nomeados.
# func(posicional, /, posicional ou nomeado, *, nomeado)
def mensagem(nome, /, mensagem, *, data):
print(f"{mensagem}, {nome}, {data}")
(posicional, /, posicional, *, nomeado)
# func(posicional, /, posicional, *, nomeado)
mensagem("Maria", "Olá", data='2025-02-19')
# Resultado Olá, Maria, 2025-02-19
(posicional, /, nomeado, *, nomeado)
# func(posicional, /, nomeado, *, nomeado)
mensagem("Maria", mensagem="Olá", data='2025-02-19')
# Resultado Olá, Maria, 2025-02-19
(nomeado, /, nomeado, *, nomeado)
# func(nomeado, /, nomeado, *, nomeado)
mensagem(nome="Maria", mensagem="Olá", data='2025-02-19') # ❌ Erro de sintaxe!
TypeError: mensagem() got some positional-only arguments passed as keyword arguments: 'nome
Ocorreu o erro pois como regra, os parâmetros antes da barra /
, devem ser somente argumentos posicionais.
- Somente argumentos nomeados.
# Argumentos podem ser somente nomeados
def mensagem(*, nome, mensagem, data):
print(f"{mensagem}, {nome}, {data}")
# func(*, nomeado, nomeado, nomeado)
mensagem(nome="Maria", mensagem="Olá", data='2025-02-19')
# Resultado Olá, Maria, 2025-02-19
# func(*, posicional, nomeado, nomeado)
mensagem("Maria", mensagem="Olá", data='2025-02-19') # ❌ Erro de sintaxe!
TypeError Traceback (most recent call last)
<ipython-input-8-e658e7fbd230> in <cell line: 0>()
----> 1 mensagem("Maria", mensagem="Olá", data='2025-02-19')
TypeError: mensagem() takes 0 positional arguments but 1 positional argument (and 2 keyword-only arguments) were given
Neste exemplo acima ocorreu o erro, pois a nossa função tem o asterisco *
antecedendo todos os parâmetros. Com isso, todos devem ser somente argumentos nomeados.
Para encerrar
- Argumentos posicionais são mais indicados para chamadas simples e diretas.
- Argumentos nomeados são ideais para funções com muitos parâmetros, deixando claro o que cada argumento representa.
- Saber combinar ambos, constrói funções flexíveis e legíveis.