Número variável de argumentos

Já vimos algumas funções que aceitam um número variável de argumentos como print() ou zip(). No entanto, ainda não criámos uma nós mesmos. Como escrever uma função que consiga lidar com um número variável de argumentos?
Ao imprimir elementos, podemos chamar a função print() com quantos argumentos quisermos, e ela irá imprimir todos eles:
print('Hi')                   # Hi
print('Hi', 'how', 'are', 1)  # Hi how are 1
print(1, 2, 3, 8)             # 1 2 3 8
Se olharmos para a assinatura da função print() na documentação oficial do Python, o primeiro argumento na verdade captura a lista completa de argumentos (não nomeados) passados para ela. O mesmo acontece com a função 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 as nossas próprias funções que aceitam um número variável de argumentos com um asterisco *:
def income(*purchases):
    total = 0
    for purchase in purchases:
        total += purchase
    return total

print(income(1, 2, 3, 4, 10))  # 20
Aqui podemos tratar purchases como uma lista de números. Podemos aceder ao seu comprimento com len(), podemos iterar sobre os elementos com um ciclo for, etc.

Desafio

Implemente uma função num_args() que devolva o número de argumentos passados para ela.
Exemplos de chamadas à função:
def num_args(*args):
    ...

print(num_args(1, 2, 3))  # 3
print(num_args())         # 0
print(num_args('Anna'))   # 1
 
Dica profissional 😎: É também possível converter uma lista simples em *args:
a = [1, 2, 3, 'hello']
print(*a)

# Isto é equivalente a
print(1, 2, 3, 'hello')
Agora já sabe como imprimir listas facilmente.
 

Constraints

Time limit: 1 seconds

Memory limit: 512 MB

Output limit: 1 MB

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