image

Acesse bootcamps ilimitados e +650 cursos

50
%OFF
Article image
Alexandre Andréo
Alexandre Andréo21/02/2025 00:57
Compartilhe

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 /:

image

Nesta estrutura acima:

  • Os dois primeiros parâmetros antes da barra / , pos1 e pos2 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.
Compartilhe
Recomendados para você
Suzano - Python Developer
BairesDev - Machine Learning Practitioner
Santander Bootcamp Cibersegurança #2
Comentários (1)
Edilson Silva
Edilson Silva - 21/02/2025 17:41

Parabéns gostei muito do seu artigo,

Ainda mais quando se envolve python.