Já vimos algumas funções que aceitam um número variável de argumentos como print() ou zip(). No entanto, ainda não criamos uma nós mesmos. Como escrever uma função que possa lidar com um número variável de argumentos?
Ao imprimir elementos, podemos chamar a função print() com quantos argumentos quisermos e ela 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 toda a lista de argumentos (não nomeados) passados para ela. O mesmo vale para a função zip:
Podemos definir 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 acessar seu comprimento com len(), podemos iterar sobre os elementos com um loop for, etc.
Desafio
Implemente uma função num_args() que retorne o número de argumentos passados para ela.