Comment utiliser les *args en Python ?

Le paramètre args permet de créer une fonction qui accepte un nombre indéfini d'arguments.

Dans la définition d'une fonction, il doit être précédé de l'opérateur 'splat' (*) :

def foo(*args):
    print(args)

La fonction foo accepte ainsi 0, 1 ou un nombre infini d'arguments, par exemple :

def foo(*args):
    print(args)

foo()
foo(1)
foo(1, 'Bonjour', True)

À l'intérieur de la fonction, les arguments envoyés au paramètre args seront récupérés sous la forme d'un tuple :

def foo(*args):
    print(args)
    print(isinstance(args, tuple))

foo(1, 2, 3)

Il est important de soulever que le nom de args n'est qu'une convention. On pourrait utiliser n'importe quel nom et cela fonctionnerait de la même façon.

👉 La seule chose qui compte vraiment, c'est l'opérateur splat (*) qui précède le nom du paramètre :

def foo(*nombres):
    print(nombres)

foo(1, 2, 3, 4)

Exemples de code

Faire la somme de plusieurs nombres :

def somme_de_nombres(*args):
    somme = 0
    for n in args:
        somme += n
    return somme

print(somme_de_nombres(1, 2, 3))
print(somme_de_nombres(2, 5, 3, 9, 8))
print(somme_de_nombres(4, 5, 2, 19, 39, 23, 3, 12, 99))

Concaténer des chaînes de caractères :

def concat_path(*args):
    path = ""
    for chemin in args:
        path += "/" + chemin
    return path

print(concat_path("Users", "ThibH", "Documents"))
print(concat_path("Users", "ThibH", "Documents", "DossierTest"))
print(concat_path("Users", "ThibH", "Documents", "DossierTest", "SousDossier"))

Enlever plusieurs éléments d'une liste :

def remove_employes(liste, *args):
    for employe in args:
        while employe in liste:
            liste.remove(employe)
    return liste

employes_origine = ["Patrick", "Julie", "Simon", "Paul", "Pauline"]

employes_final = remove_employes(employes_origine, "Patrick", "Paul")
print(employes_final)