Python: le funzioni con un numero variabile di argomenti e kwargs

Python: le funzioni con un numero variabile di argomenti e kwargs

In questo articolo vedremo come si comportano in Python le funzioni che accettano un numero variabile di argomenti specificati tramite la convenzione kwargs.

**kwargs permette alla funzione di accettare un numero variabile di argomenti specificati come coppie chiave/valore. kwargs verrà interpretato come un dizionario in cui saranno contenuti gli argomenti passati. Ad esempio:

def test_func(**kwargs):
    print(kwargs)
    
test_func(a=1, b=2)    

Otterremo:

{'a': 1, 'b': 2}

A differenza di altri linguaggi, Python è rigoroso quando si tratta di validare la firma di una funzione o di un metodo. Avendo usato **kwargs se scrivessimo ad esempio:

test_func(1, 2)

Otterremmo un TypeError:

TypeError: test_func() takes 0 positional arguments but 2 were given

Se non vengono passati argomenti, otterremo un dizionario vuoto. Quindi la seguente invocazione della funzione:

test_func()

Produrrà il seguente output:

{}

Quindi se vogliamo specificare valori predefiniti in caso di invocazione della funzione senza argomenti, possiamo usare il metodo get() dei dizionari sfruttando il secondo argomento di tale metodo che restituisce il valore predefinito in assenza della chiave indicata.

def test_func(**kwargs):
    a = kwargs.get('a', 0)
    b = kwargs.get('b', 0)
    return a + b
    
print(test_func(a=1, b=2))

print(test_func())    

Otterremo il seguente output:

3
0

Ovviamente uno step da aggiungere è la validazione del tipo di dati ottenuto dai parametri passati tramite **kwargs onde evitare un output imprevisto da parte della funzione.

Torna su