Como Usar o args de forma Fácil?
Python args e kwargs: Desmistificados
por Davide Mastromatteo intermediário python
No final do artigo, você entenderá:
- O que
*args
e**kwargs
realmente significam - Como usar
*args
e**kwargs
em definições de função - Como usar um único asterisco (
*
) para desempacotar iteráveis - Como usar dois asteriscos (
**
) para desempacotar dicionários
Bônus grátis: Clique aqui para obter uma Folha de Cheats do Python e aprender os conceitos básicos do Python 3, como trabalhar com tipos de dados, dicionários, listas e funções em Python.
Faça o Quiz: Teste seus conhecimentos com nosso quiz interativo “Python args e kwargs: Desmistificados”. Ao final, você receberá uma pontuação para acompanhar seu progresso de aprendizado ao longo do tempo:
Passando Múltiplos Argumentos para uma Função
*args
e **kwargs
permitem que você passe múltiplos argumentos ou argumentos de palavras-chave para uma função. Considere o exemplo a seguir. Esta é uma função simples que recebe dois argumentos e retorna a soma deles:
Python
Essa função funciona bem, mas está limitada a apenas dois argumentos. E se você precisar somar um número variável de argumentos, em que o número específico de argumentos passados só é determinado em tempo de execução? Não seria ótimo criar uma função que pudesse somar todos os inteiros passados para ela, não importa quantos sejam?
Usando a Variável args do Python em Definições de Função
Python somar_inteiros_lista.py
Esta implementação funciona, mas sempre que você chamar essa função, também precisará criar uma lista de argumentos para passar a ela. Isso pode ser inconveniente, especialmente se você não souber de antemão todos os valores que devem ser inseridos na lista.
Aqui é onde *args
pode ser realmente útil, porque permite que você passe um número variável de argumentos posicionais. Veja o exemplo a seguir:
Python somar_inteiros_args.py
Neste exemplo, você não está mais passando uma lista para minha_soma()
. Em vez disso, você está passando cada um dos argumentos separadamente. O operador *
antes de args
indica que a função pode receber um número variável de argumentos posicionais e eles serão agrupados em uma tupla.
Agora, você pode chamar minha_soma()
com qualquer número de argumentos e eles serão somados corretamente.
Utilizando a Variável kwargs do Python em Definições de Funções
Até agora, você aprendeu como passar um número variável de argumentos posicionais para uma função usando *args
. Mas e se você precisar passar um número variável de argumentos de palavras-chave, onde cada argumento é uma chave-valor? É aí que entra a variável **kwargs
.
Assim como *args
, **kwargs
permite que você passe um número variável de argumentos de palavras-chave para uma função. A diferença é que **kwargs
agrupa os argumentos adicionais em um dicionário, em vez de uma tupla.
Veja o exemplo a seguir:
Python saudacao.py
Neste exemplo, você não está mais passando uma lista ou um tupla de argumentos de palavras-chave. Em vez disso, você está passando cada argumento separadamente usando o formato chave=valor
. O operador **
antes de kwargs
indica que a função pode receber um número variável de argumentos de palavras-chave e eles serão agrupados em um dicionário. Dentro da função, você pode iterar sobre os itens do dicionário para obter as chaves e valores.
Agora, quando você chama saudacao()
, você pode passar quantos argumentos de palavras-chave quiser e eles serão impressos corretamente.
Ordenando Argumentos em uma Função
Quando se trabalha com uma função que recebe tanto *args
quanto **kwargs
, a ordem dos argumentos é importante. Os argumentos posicionais devem vir antes dos argumentos de palavras-chave. Por exemplo:
Python exemplo_ordem_args_kwargs.py
Neste exemplo, minha_funcao()
aceita tanto argumentos posicionais quanto argumentos de palavras-chave. Os argumentos posicionais são impressos primeiro, seguidos pelos argumentos de palavras-chave.
Certifique-se de definir essa ordem corretamente ao definir suas próprias funções.
Desempacotamento com os Operadores Asterisco: * & **
Além de permitir passar um número variável de argumentos para uma função, *args
e **kwargs
também podem ser usados para desempacotar sequências e dicionários existentes.
Quando você usa um único asterisco (*
) antes de uma sequência em uma chamada de função, os itens da sequência são desempacotados e passados como argumentos posicionais para a função. Veja o exemplo a seguir:
Python desempacotamento_lista.py
Neste exemplo, a lista [1, 2, 3]
é desempacotada e os valores 1
, 2
e 3
são passados como argumentos posicionais para minha_funcao()
.
Da mesma forma, quando você usa dois asteriscos (**
) antes de um dicionário em uma chamada de função, os pares chave-valor do dicionário são desempacotados e passados como argumentos de palavras-chave para a função. Veja o exemplo a seguir:
Python desempacotamento_dicionario.py
Neste exemplo, o dicionário {"nome": "Alice", "idade": 25}
é desempacotado e os pares chave-valor "nome": "Alice"
e "idade": 25
são passados como argumentos de palavras-chave para minha_funcao()
.
O desempacotamento com os operadores asterisco *
e **
é uma maneira útil de passar os itens de uma sequência ou dicionário existente como argumentos para uma função. Isso pode ser especialmente útil quando se trabalha com funções que aceitam *args
e **kwargs
.
Conclusão
Em resumo, os argumentos *args
e **kwargs
em Python permitem que você passe um número variável de argumentos posicionais e argumentos de palavras-chave para uma função. Eles fornecem flexibilidade ao definir funções que podem receber um número desconhecido de argumentos. Além disso, você pode usar o operador asterisco *
para desempacotar sequências e o operador de dois asteriscos **
para desempacotar dicionários.
Agora você pode usar args e kwargs para tornar suas funções mais flexíveis e poderosas em Python. Experimente esses conceitos em suas próprias funções e descubra como eles podem melhorar a eficiência e legibilidade do seu código.
Esperamos que este artigo tenha ajudado a desmistificar args e kwargs em Python. Se você tiver alguma dúvida, deixe um comentário abaixo e teremos prazer em ajudar!