Python * args e ** kwargs (com exemplos)

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:

  1. * args (argumentos sem palavra-chave)
  2. ** 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.

Artigos interessantes...