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:
- * args (argomenti non relativi alle parole chiave)
- ** 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.