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:
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.