Python: * args vs. ** kwargs

Os argumentos podem ser definidos como posicionais :

def func1(*args):
return args


>>> func1(1, 2, 3)
(1, 2, 3)

Ou como * palavra-chave *:

def func2(**kwargs):
return kwargs

>>> func2(one=1, two=2, three=3)
{'three': 3, 'two': 2, 'one': 1}

Você também pode fazer ambos ao mesmo tempo:

def func3(*args, **kwargs):
print(args)
print(kwargs)

>>> func3(1, 2, a=3, b=4)
(1, 2)
{"a": 3, "b": 4}