![]() |
In Python, le funzioni sono estremamente flessibili. A volte però non sappiamo in anticipo quanti argomenti verranno passati a una funzione. È qui che entrano in gioco *args e **kwargs.
Vediamoli uno alla volta, con esempi semplici e concreti.
Cos’è *args
*args permette a una funzione di accettare un numero variabile di argomenti posizionali.
Esempio base
def somma(*args):
totale = 0
for numero in args:
totale += numero
return totale
print(somma(1, 2, 3))
print(somma(5, 10, 15, 20))
📌 Output:
6
50
In questo caso:
argsè una tupla- contiene tutti gli argomenti passati alla funzione
👉 Il nome args è solo una convenzione: potresti chiamarlo anche *numeri, ma usare args rende il codice più leggibile per chi lo legge.
Usare *args con altri parametri
*args può convivere con parametri “normali”, ma deve venire dopo di loro.
def saluta(messaggio, *nomi):
for nome in nomi:
print(f"{messaggio}, {nome}!")
saluta("Ciao", "Luca", "Anna", "Marco")
Cos’è **kwargs
**kwargs permette di passare a una funzione un numero variabile di argomenti con nome (keyword arguments).
Esempio base
def stampa_info(**kwargs):
for chiave, valore in kwargs.items():
print(f"{chiave}: {valore}")
stampa_info(nome="Mario", età=30, città="Roma")
In questo caso:
kwargsè un dizionario- contiene coppie
chiave: valore
📌 Anche qui, kwargs è una convenzione che sta per keyword arguments.
*args e **kwargs insieme
Si possono usare entrambi nella stessa funzione. L’ordine corretto è:
- parametri normali
*args**kwargs
def esempio(a, b, *args, **kwargs):
print("a:", a)
print("b:", b)
print("args:", args)
print("kwargs:", kwargs)
esempio(1, 2, 3, 4, x=10, y=20)
📌 Output:
a: 1
b: 2
args: (3, 4)
kwargs: {'x': 10, 'y': 20}
Quando usare *args e **kwargs
Sono particolarmente utili quando:
- stai scrivendo funzioni generiche
- crei decorator
- lavori con API, librerie o framework
- vuoi rendere il codice più flessibile e riutilizzabile
Un esempio tipico è il forwarding degli argomenti:
def wrapper(*args, **kwargs):
return funzione_originale(*args, **kwargs)
Schema riepilogativo
| Elemento | Tipo di argomenti | Struttura dati | Quando usarlo | Esempio |
|---|---|---|---|---|
*args |
Posizionali | Tupla | Quando il numero di argomenti non è noto in anticipo | def f(*args): |
**kwargs |
Con nome (keyword) | Dizionario | Quando vuoi passare coppie chiave-valore opzionali | def f(**kwargs): |
*args + **kwargs |
Posizionali e con nome | Tupla + Dizionario | Per funzioni flessibili o wrapper/decorator | def f(*args, **kwargs): |
Attenzione a non abusarne ⚠️
Anche se sono potenti, usarli ovunque può rendere il codice:
- meno leggibile
- più difficile da debuggare
👉 Usali solo quando servono davvero.
Conclusione
*argsraccoglie argomenti posizionali in una tupla**kwargsraccoglie argomenti con nome in un dizionario- Insieme rendono le funzioni Python estremamente flessibili
Se stai imparando Python, capirli bene è un passo fondamentale per scrivere codice più elegante e professionale 🐍✨
Follow me #techelopment
Official site: www.techelopment.it
facebook: Techelopment
instagram: @techelopment
X: techelopment
Bluesky: @techelopment
telegram: @techelopment_channel
whatsapp: Techelopment
youtube: @techelopment
