Python * args e ** kwargs (con esempi)

In questo articolo, impareremo a conoscere * args e ** kwargs di Python, i loro usi e funzioni con esempi.

Nella programmazione, definiamo una funzione per creare un codice riutilizzabile che esegue un'operazione simile. Per eseguire tale operazione, chiamiamo una funzione con il valore specifico, questo valore è chiamato un argomento di funzione in Python.

Ti consigliamo di leggere la funzione Python e gli argomenti della funzione Python.

Supponiamo di definire una funzione per l'addizione di 3 numeri.

Esempio 1: funzione per aggiungere 3 numeri

 def adder(x,y,z): print("sum:",x+y+z) adder(10,12,13)

Quando eseguiamo il programma sopra, l'output sarà

 somma: 35

Nel programma sopra abbiamo una adder()funzione con tre argomenti x, y e z. Quando passiamo tre valori durante la chiamata alla adder()funzione, otteniamo la somma dei 3 numeri come output.

Vediamo cosa succede quando passiamo più di 3 argomenti nella adder()funzione.

 def adder(x,y,z): print("sum:",x+y+z) adder(5,10,15,20,25)

Quando eseguiamo il programma sopra, l'output sarà

 TypeError: adder () accetta 3 argomenti posizionali ma ne sono stati forniti 5

Nel programma sopra, abbiamo passato 5 argomenti alla adder()funzione invece di 3 argomenti grazie ai quali abbiamo ottenuto TypeError.

Introduzione a * args e ** kwargs in Python

In Python, possiamo passare un numero variabile di argomenti a una funzione utilizzando simboli speciali. Ci sono due simboli speciali:

  1. * args (argomenti non relativi alle parole chiave)
  2. ** kwargs (argomenti delle parole chiave)

Usiamo * args e ** kwargs come argomento quando non siamo sicuri del numero di argomenti da passare nelle funzioni.

Python * args

Come nell'esempio precedente, non siamo sicuri del numero di argomenti che possono essere passati a una funzione. Python ha * argomenti che ci consentono di passare il numero variabile di argomenti non di parole chiave alla funzione.

Nella funzione, dovremmo usare un asterisco *prima del nome del parametro per passare argomenti di lunghezza variabile. Gli argomenti vengono passati come una tupla e questi argomenti passati creano una tupla all'interno della funzione con lo stesso nome del parametro escluso l'asterisco *.

Esempio 2: utilizzo di * args per passare gli argomenti di lunghezza variabile alla funzione

 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 eseguiamo il programma sopra, l'output sarà

 Somma: 8 Somma: 22 Somma: 17

Nel programma sopra, abbiamo usato * num come parametro che ci permette di passare alla adder()funzione un elenco di argomenti di lunghezza variabile . All'interno della funzione, abbiamo un ciclo che aggiunge l'argomento passato e stampa il risultato. Abbiamo passato 3 diverse tuple con lunghezza variabile come argomento alla funzione.

Python ** kwargs

Python passa un argomento di lunghezza variabile senza parola chiave alla funzione usando * args ma non possiamo usarlo per passare un argomento di parola chiave. Per questo problema Python ha una soluzione chiamata ** kwargs, che ci permette di passare la lunghezza variabile degli argomenti delle parole chiave alla funzione.

Nella funzione, usiamo il doppio asterisco **prima del nome del parametro per denotare questo tipo di argomento. Gli argomenti vengono passati come un dizionario e questi argomenti creano un dizionario all'interno di una funzione con nome uguale al parametro escluso il doppio asterisco **.

Esempio 3: utilizzo di ** kwargs per passare gli argomenti della parola chiave variabile alla funzione

 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 eseguiamo il programma sopra, l'output sarà

 Tipo di argomento dei dati: Nome è Sita Il cognome è Sharma Età è 22 Il telefono è 1234567890 Tipo di argomento dei dati: Nome è John Il cognome è Wood L'email è [email protected] Il paese è Wakanda L'età è 25 Il telefono è 9876543210

Nel programma sopra, abbiamo una funzione intro()con ** dati come parametro. Abbiamo passato due dizionari con lunghezza di argomento variabile alla intro()funzione. Abbiamo la intro()funzione for loop inside che lavora sui dati del dizionario passato e stampa il valore del dizionario.

Cose da ricordare:

  • * args e * kwargs sono parole chiave speciali che consentono alla funzione di accettare argomenti di lunghezza variabile.
  • * args passa il numero variabile di un elenco di argomenti senza parole chiave e su quale operazione dell'elenco può essere eseguita.
  • ** kwargs passa un numero variabile di argomenti di parole chiave al dizionario alla funzione su cui può essere eseguita l'operazione di un dizionario.
  • * args e ** kwargs rendono la funzione flessibile.

Articoli interessanti...