Abbiamo già visto alcune funzioni che accettano un numero variabile di argomenti come print() o zip(). Tuttavia, non ne abbiamo ancora creata una noi stessi. Come si scrive una funzione che può gestire un numero variabile di argomenti?
Quando stampiamo elementi, possiamo chiamare la funzione print() con quanti argomenti vogliamo e stamperà tutti quanti:
print('Hi') # Hi
print('Hi', 'how', 'are', 1) # Hi how are 1
print(1, 2, 3, 8) # 1 2 3 8
Se diamo uno sguardo alla firma della funzione print() nella documentazione ufficiale di Python, il primo argomento in realtà cattura l'intero elenco di argomenti (non keyword) passati ad essa. Lo stesso vale per la funzione zip:
Possiamo definire le nostre funzioni che accettano un numero variabile di argomenti usando un asterisco *:
def income(*purchases):
total = 0
for purchase in purchases:
total += purchase
return total
print(income(1, 2, 3, 4, 10)) # 20
Qui possiamo trattare purchases come una lista di numeri. Possiamo accedere alla sua lunghezza con len(), possiamo iterare sugli elementi con un ciclo for, ecc.
Sfida
Implementa una funzione num_args() che restituisca il numero di argomenti passati ad essa.