Número variable de argumentos

Ya hemos visto algunas funciones que aceptan un número variable de argumentos como print() o zip(). Sin embargo, no hemos creado una nosotros mismos. ¿Cómo escribir una función que pueda manejar un número variable de argumentos?
Al imprimir elementos, podemos llamar a la función print() con tantos argumentos como queramos y los imprimirá todos:
print('Hi')                   # Hi
print('Hi', 'how', 'are', 1)  # Hi how are 1
print(1, 2, 3, 8)             # 1 2 3 8
Si observamos la firma de la función print() en la documentación oficial de Python, el primer argumento en realidad captura toda la lista de argumentos (no de palabras clave) que se le pasan. Lo mismo ocurre con la función zip:
print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)
zip(*iterables, strict=False)
Source: https://docs.python.org/3/library/functions.html
Podemos definir nuestras propias funciones que acepten un número variable de argumentos con un asterisco *:
def income(*purchases):
    total = 0
    for purchase in purchases:
        total += purchase
    return total

print(income(1, 2, 3, 4, 10))  # 20
En este caso, podemos tratar purchases como una lista de números. Podemos acceder a su longitud con len(), podemos iterar sobre los elementos con un bucle for, etc.

Desafío

Implementa una función num_args() que devuelva el número de argumentos que se le pasan.
Llamadas de ejemplo a la función:
def num_args(*args):
    ...

print(num_args(1, 2, 3))  # 3
print(num_args())         # 0
print(num_args('Anna'))   # 1
 
Consejo profesional 😎: También es posible convertir una lista simple en *args:
a = [1, 2, 3, 'hello']
print(*a)

# Esto es equivalente a
print(1, 2, 3, 'hello')
Ahora sabes cómo imprimir listas fácilmente.
 

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