Numero variabile di argomenti

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:
print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)
zip(*iterables, strict=False)
Source: https://docs.python.org/3/library/functions.html
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.
Esempi di chiamate alla funzione:
def num_args(*args):
    ...

print(num_args(1, 2, 3))  # 3
print(num_args())         # 0
print(num_args('Anna'))   # 1
 
Consiglio utile 😎: È anche possibile trasformare una semplice lista in *args:
a = [1, 2, 3, 'hello']
print(*a)

# Questo è equivalente a
print(1, 2, 3, 'hello')
Ora sai come stampare facilmente le liste.
 

Constraints

Time limit: 2 seconds

Memory limit: 512 MB

Output limit: 1 MB

To check your solution you need to sign in
Sign in to continue