Nous avons déjà vu certaines fonctions qui acceptent un nombre variable d'arguments comme print() ou zip(). Pourtant, nous n'en avons pas encore créé nous-mêmes. Comment écrire une fonction qui peut gérer un nombre variable d'arguments ?
Lorsque nous imprimons des éléments, nous pouvons appeler la fonction print() avec autant d'arguments que nous le souhaitons, et elle les imprimera tous :
print('Hi') # Hi
print('Hi', 'how', 'are', 1) # Hi how are 1
print(1, 2, 3, 8) # 1 2 3 8
Si nous regardons la signature de la fonction print() dans la documentation officielle de Python, le premier argument capture en fait la liste complète des arguments (non nommés) qui lui sont passés. Il en va de même pour la fonction zip :
Nous pouvons définir nos propres fonctions qui acceptent un nombre variable d'arguments en utilisant un astérisque * :
def income(*purchases):
total = 0
for purchase in purchases:
total += purchase
return total
print(income(1, 2, 3, 4, 10)) # 20
Ici, nous pouvons traiter purchases comme une liste de nombres. Nous pouvons accéder à sa longueur avec len(), nous pouvons parcourir les éléments avec une boucle for, etc.
Défi
Implémentez une fonction num_args() qui renvoie le nombre d'arguments qui lui sont passés.