Quando você está aprendendo Python, pode se deparar com definições de funções que incluem *args
e **kwargs
e se perguntar para que servem. Esses são símbolos especiais usados em definições de funções que permitem passar um número variável de argumentos para uma função. Vamos entender o que cada um desses nomes representa, e como você pode usar *args
e **kwargs
em Python para aumentar a eficácia e legibilidade do seu código.
O que é *args
em Python?
O *args
é uma expressão comum em Python que permite passar um número arbitrário de argumentos para uma função. Esses argumentos são agrupados em uma tupla antes de serem passados para a função. Aqui está um exemplo simples para ilustrar *args
:
def func(*args):
for a in args:
print(a)
func(1)
func(1, 2, 3)
No exemplo acima, definimos a função func()
, que aceita qualquer argumentos passados a ela. chamar func(1)
imprimirá 1
, e chamar foo(1, 2, 3)
imprimirá 1
, 2
e 3
em linhas separadas. O *args
coleta todos os argumentos posicionais em uma tupla representada pela variável args
, o que facilita a iteração sobre eles.
O que é **kwargs
em Python?
De maneira similar, **kwargs
faz com que uma função aceite argumentos nomeados arbitrários, isto é, argumentos que você passa para a função com a estrutura nome="valor"
. O **kwargs
coleta todos os argumentos de palavra-chave em um dicionário, onde a chave é o nome do parâmetro, e seu valor correspondente é o valor entregue à função. Veja o exemplo a seguir:
def func(**kwargs):
for key, value in kwargs.items():
print(f"{key} = {value}")
func(name='Juliano', age=27)
Neste caso, a função func()
aceita qualquer argumento nomeado que for entregue a ela. Chamar func(name='Juliano', age=27)
imprimirá name = Juliano
e age = 27
. Isso demonstra que a variável kwargs
coleta todos os argumentos de palavra-chave em um dicionário, sobre o qual iteramos com o método .items()
.
Misturando *args
, **kwargs
e Parâmetros Regulares
Você pode misturar *args
e **kwargs
com parâmetros regulares de função para permitir uma combinação de argumentos fixos e variáveis:
def func(valorno-editor, *args, nome=None, **kwargs):<br> print(valor, args, nome, kwargs)<br><br><br>func(123, 'a', 'b', nome='Juliano', cor='vermelho')
Esta chamada da função func()
imprimirá o seguinte:
123 ('a', 'b') Juliano {'cor': 'vermelho'}
Vamos avaliar o que aconteceu: o primeiro argumento é atribuído ao parâmetro valor
, enquanto o *args
coleta os demais argumentos (os valores 'a'
e 'b'
) como uma tupla. O parâmetro nome
recebe o valor 'Juliano'
de forma explícita, pois é um argumento nomeado. Por fim, como não há um parâmetro explícito chamado cor
, o valor 'vermelho'
é capturado pelo **kwargs
em um dicionário.
Usando os Operadores de Asterisco * e ** ao Chamar Funções
Você também pode usar os operadores *
e **
ao chamar funções. Eles servem para desempacotar sequências (no caso de *
) ou dicionários (no caso de **
) em argumentos separados:
def func(x, y, z):
print(f"x={x}, y={y}, z={z}")
valores_lista = [1, 2, 3]
func(*valores_lista)
valores_dict = {'x': 1, 'y': 2, 'z': 3}
func(**valores_dict)
Ambas chamadas da função func() irão exibir o resultado x=1, y=2, z=3
. Usar *valores_lista
desempacota a lista em argumentos individuais, portanto a chamada de função é equivalente a func(1, 2, 3)
. De forma similar, **valores_dict
desempacota o dicionário em argumentos de palavra-chave, sendo equivalente a chamar a função como func(x=1, y=2, z=3)
.
Resumo: *args
e **kwargs
em Python
Neste post, exploramos o uso de *args
e **kwargs
em funções Python. *args
permite passar um número variável de argumentos posicionais, enquanto **kwargs
permite um número arbitrário de argumentos de palavra-chave. Estes podem ser misturados com parâmetros regulares para criar definições de funções flexíveis. Além disso, você pode usar *
e **
para desempacotar listas, tuplas ou dicionários ao chamar funções, tornando seu código mais conciso e legível.
Entender esses conceitos aumentará significativamente sua capacidade de escrever e trabalhar com funções em Python!
Cursos de programação gratuitos com certificado
Aprenda a programar e desenvolva soluções para o seu trabalho com Python para alcançar novas oportunidades profissionais. Aqui na Asimov você encontra:
- Conteúdos gratuitos
- Projetos práticos
- Certificados
- +20 mil alunos e comunidade exclusiva
- Materiais didáticos e download de código
Comentários