Bem, tecnicamente é *qualquer **qualquer coisa, mas a convenção é *args e **kwargs.


Python *args


*args e **kwargs geralmente são usados em definições de funções. Ambos permitem que você passe uma variável (ou digamos, um número que você não pode planejar) número de argumentos para uma função.

*args é usado para enviar uma lista de argumentos de comprimento variável sem palavras-chave para a função.

 

def teste_args(p_arg, *args):

    print("primeiro argumento normal:", p_arg)

    for arg in args:

        print("outro arg através de *args :", arg)

 

teste_args('Joao','Futi','Usando','Python')

 


Saída —--------------------

primeiro argumento normal: Joao

outro arg através de *args : Futi

outro arg através de *args : Usando

outro arg através de *args : Python


Python **kwargs

Então, vimos como *args é usado para passar uma lista de argumentos de comprimento variável sem palavras-chave. **kwargs faz isso, mas para argumentos nomeados/com palavras-chave!


 

def teste(**kwargs):

    if kwargs is not None:

        for key, value in kwargs.items():

            print("%s diz %s" % (key, value))

 

teste(Python="Bom dia", Joao="oi")

 


Saída —--------------------

Python diz Bom dia

Joao diz oi

Passando argumentos e kwargs em funções Python

Digamos que você queira escrever uma lista e queira passar os elementos da lista para a função.


 

def funcao_teste(p1, p2, p3):

    print(p1,p2,p3)

    return

 



Você não pode passar uma lista ou uma tupla para isso porque toda a lista ou tupla será passada como o primeiro argumento ...

ENTÃO COMO VOCÊ FAZ ISSO?


 

def funcao_teste(p1, p2, p3):

    print(p1,p2,p3)

    return

 

argumentos = (1,2,3)

 

funcao_teste(*argumentos)

 


Saída —--------------------

1 2 3


Você pode fazer a mesma coisa com kwargs também


def funcao_teste(p1, p2, p3):

    print(p1,p2,p3)

    return

 

kwargs = {"p1": 1, "p2": 2, "p3": 3}

 

funcao_teste(*kwargs)

 


Saída —--------------------

p1 p2 p3


Observe que escrever "p4": 4 lançará uma exceção, pois p4 não foi definido no protótipo da função


Iterando sobre argumentos passados por args em Python

# Se a função está definida

def nome_da_funcao(*args):

     # Então

     argumentos = argumentos

     # Terá os argumentos retornando uma tupla de argumentos

   

# Se a função está definida

def nome_da_funcao(**kwargs):

     # Então

     argumentos = kwargs

     # Terá argumentos para retornar um dicionário de argumentos

   

# Você pode usá-los para iterar usando loops for



Args, Kwarg, ordenação de argumentos formais


# A ordenação é feita desta forma

nome_da_funcao(argumentos, *args, **kwargs)