Neste artigo, aprenderemos sobre Python * args e ** kwargs, seus usos e funções com exemplos.
Na programação, definimos uma função para fazer um código reutilizável que executa uma operação semelhante. Para realizar essa operação, chamamos uma função com o valor específico, esse valor é chamado de argumento de função em Python.
Recomendamos que você leia a função Python e os argumentos da função Python.
Suponha que definimos uma função para adição de 3 números.
Exemplo 1: função para adicionar 3 números
def adder(x,y,z): print("sum:",x+y+z) adder(10,12,13)
Quando executarmos o programa acima, a saída será
soma: 35
No programa acima, temos uma adder()
função com três argumentos x, y e z. Quando passamos três valores ao chamar a adder()
função, obtemos a soma dos 3 números como saída.
Vamos ver o que acontece quando passamos mais de 3 argumentos na adder()
função.
def adder(x,y,z): print("sum:",x+y+z) adder(5,10,15,20,25)
Quando executarmos o programa acima, a saída será
TypeError: adder () leva 3 argumentos posicionais, mas 5 foram dados
No programa acima, passamos 5 argumentos para a adder()
função em vez de 3 argumentos devidos aos quais obtivemos TypeError
.
Introdução a * args e ** kwargs em Python
Em Python, podemos passar um número variável de argumentos para uma função usando símbolos especiais. Existem dois símbolos especiais:
- * args (argumentos sem palavra-chave)
- ** kwargs (argumentos de palavra-chave)
Usamos * args e ** kwargs como um argumento quando não temos certeza sobre o número de argumentos a passar nas funções.
Python * args
Como no exemplo acima, não temos certeza sobre o número de argumentos que podem ser passados para uma função. Python possui * args que nos permitem passar o número variável de argumentos não-palavra-chave para a função.
Na função, devemos usar um asterisco *
antes do nome do parâmetro para passar argumentos de comprimento variável. Os argumentos são passados como uma tupla e esses argumentos passados fazem a tupla dentro da função com o mesmo nome do parâmetro, excluindo asterisco *
.
Exemplo 2: usando * args para passar os argumentos de comprimento variável para a função
def adder(*num): sum = 0 for n in num: sum = sum + n print("Sum:",sum) adder(3,5) adder(4,5,6,7) adder(1,2,3,5,6)
Quando executarmos o programa acima, a saída será
Soma: 8 Soma: 22 Soma: 17
No programa acima, usamos * num como um parâmetro que nos permite passar a lista de argumentos de comprimento variável para a adder()
função. Dentro da função, temos um loop que adiciona o argumento passado e imprime o resultado. Passamos 3 tuplas diferentes com comprimento variável como um argumento para a função.
Python ** kwargs
Python passa o argumento de palavra-chave de comprimento variável para função usando * args, mas não podemos usar isso para passar o argumento de palavra-chave. Para este problema, o Python tem uma solução chamada ** kwargs, que nos permite passar o comprimento variável dos argumentos de palavras-chave para a função.
Na função, usamos o asterisco duplo **
antes do nome do parâmetro para denotar esse tipo de argumento. Os argumentos são passados como um dicionário e esses argumentos fazem um dicionário dentro da função com o mesmo nome do parâmetro excluindo asterisco duplo **
.
Exemplo 3: Usando ** kwargs para passar os argumentos de palavra-chave variável para a função
def intro(**data): print("Data type of argument:",type(data)) for key, value in data.items(): print("() is ()".format(key,value)) intro(Firstname="Sita", Lastname="Sharma", Age=22, Phone=1234567890) intro(Firstname="John", Lastname="Wood", Email="[email protected]", Country="Wakanda", Age=25, Phone=9876543210)
Quando executarmos o programa acima, a saída será
Tipo de dados do argumento: Nome é Sita Sobrenome é Sharma Idade é 22 O telefone é 1234567890 Tipo de dados do argumento: Nome é John Sobrenome é Madeira E-mail é [email protected] País é Wakanda Idade 25 O telefone é 9876543210
No programa acima, temos uma função intro()
com ** dados como parâmetro. Passamos dois dicionários com comprimento de argumento variável para a intro()
função. Temos a intro()
função de loop for dentro que trabalha nos dados do dicionário passado e imprime o valor do dicionário.
Coisas para lembrar:
- * args e * kwargs são palavras-chave especiais que permitem que a função receba argumentos de comprimento variável.
- * args passa o número variável da lista de argumentos sem palavra-chave e na qual a operação da lista pode ser executada.
- ** kwargs passa o número variável do dicionário de argumentos de palavras-chave para a função na qual a operação de um dicionário pode ser executada.
- * args e ** kwargs tornam a função flexível.