Aller au contenu

args / *kwargs#

courant

*args — arguments positionnels variables#

def somme(*args):
    print(args)   # tuple
    return sum(args)

somme(1, 2, 3)   # (1, 2, 3) -> 6

**kwargs — arguments nommés variables#

def config(**kwargs):
    print(kwargs)   # dict

config(hote="localhost", port=8080)   # {'hote': 'localhost', 'port': 8080}

Combinaison#

def f(a, b, *args, c=0, **kwargs):
    ...

f(1, 2, 3, 4, c=5, d=6)
# a=1, b=2, args=(3, 4), c=5, kwargs={'d': 6}

Ordre obligatoire dans la signature : positionnels, *args, keyword-only, **kwargs.

Dépaquetage à l'appel#

def addition(a, b, c):
    return a + b + c

valeurs = [1, 2, 3]
addition(*valeurs)          # dépaquette la liste en 3 arguments positionnels

options = {"a": 1, "b": 2, "c": 3}
addition(**options)          # dépaquette le dict en arguments nommés

Fusion de dictionnaires#

defauts = {"couleur": "bleu", "taille": "M"}
overrides = {"taille": "L"}
fusion = {**defauts, **overrides}   # {'couleur': 'bleu', 'taille': 'L'}

Fusion de listes#

a = [1, 2]
b = [3, 4]
combinee = [*a, *b]   # [1, 2, 3, 4]

Cas d'usage typique : décorateur générique#

def wrapper(*args, **kwargs):
    return fonction_originale(*args, **kwargs)   # transmet tous les arguments tels quels