*args e **kwargs

*args

Python offre un modo per gestire un numero arbitrario di argomenti in una funzione attraverso simboli speciali. Questi simboli sono * e **, e vengono utilizzati davanti ai nomi delle variabili per indicare rispettivamente *args e **kwargs. Puoi dare ai parametri *args o **kwargs qualsiasi nome tu preferisca, ma per convenzione si utilizzano args (arguments) e kwargs (keyword arguments).
*args viene usato per inviare un numero arbitrario di argomenti alla funzione senza parole chiave. Ecco un esempio:
def add(*args):
    res = 0             # Inizializza il risultato finale a 0
    for num in args:    # Itera attraverso la lista degli argomenti passati
        res += num      # Aggiunge ogni numero alla somma
    return res

print(add(3, 5, 7, 9))  # 24
In questo programma, args è una tupla con i valori che passiamo alla funzione. Quindi, nell'esempio sopra, args è uguale a (3, 5, 7, 9). In questo modo possiamo passare alla nostra funzione qualsiasi numero di argomenti.

**kwargs

**kwargs ci permette di passare un numero arbitrario di argomenti con parole chiave. In altre parole, usiamo **kwargs per passare alla nostra funzione qualsiasi numero di argomenti con parole chiave. Ecco un esempio:
def introduce(**kwargs):
    for key, value in kwargs.items():  # Itera attraverso tutte le coppie chiave-valore
        print(f'{key}: {value}')       # Stampa ogni coppia chiave-valore

introduce(Name='Alice', Age=25, Country='USA')  
# 'Name: Alice'
# 'Age: 25'
# 'Country: USA'
Nel programma sopra, kwargs è un dizionario con le coppie chiave-valore che passiamo alla funzione. Quindi, nell'esempio, kwargs è uguale a {'Name': 'Alice', 'Age': 25, 'Country': 'USA'}.
Puoi anche combinare *args e **kwargs in una chiamata di funzione. *args deve venire prima di **kwargs.
def combined_example(*args, **kwargs):
    print(args)    # Stampa la tupla degli argomenti
    print(kwargs)  # Stampa il dizionario degli argomenti con parole chiave

combined_example(1, 2, 3, Name='Alice', Age=25)  
# (1, 2, 3)
# {'Name': 'Alice', 'Age': 25}
In questa funzione, args è una tupla con i valori (1, 2, 3) e kwargs è un dizionario con i valori {'Name': 'Alice', 'Age': 25}.
Questa flessibilità nel gestire qualsiasi numero di argomenti e argomenti con parole chiave può essere davvero utile quando desideri che le tue funzioni siano più dinamiche e versatili.

Combinare *args e **kwargs con argomenti regolari della funzione

*args e **kwargs possono essere utilizzati in combinazione con argomenti regolari della funzione. In questi casi, devi tenere a mente alcune regole:
  1. L'ordine corretto degli argomenti nella definizione della funzione dovrebbe essere: argomenti standard, *args, poi **kwargs.
  1. Gli argomenti standard (noti anche come argomenti posizionali) devono sempre essere specificati prima di *args e **kwargs.
def function_example(a, b, *args, **kwargs):
    print(a)       # Stampa il primo argomento standard
    print(b)       # Stampa il secondo argomento standard
    print(args)    # Stampa gli argomenti aggiuntivi non con parole chiave
    print(kwargs)  # Stampa gli argomenti con parole chiave

function_example(1, 2, 3, 4, 5, Name='Alice', Age=25)
# 1
# 2
# (3, 4, 5)
# {'Name': 'Alice', 'Age': 25}
Qui 1 e 2 sono argomenti standard che corrispondono a a e b nella definizione della funzione. La tupla (3, 4, 5) rappresenta gli argomenti aggiuntivi raccolti in args. Gli argomenti con parole chiave rimanenti sono raccolti in kwargs come un dizionario.
Quando utilizzi *args e **kwargs con argomenti standard, assicurati di non dimenticare gli argomenti standard quando chiami la funzione, poiché questo genererebbe un TypeError. Ad esempio, chiamando function_example(1, Name='Alice', Age=25) senza fornire un valore per l'argomento b si verificherà un errore.
 
To check your solution you need to sign in
Sign in to continue