Ce n'est pas un opérateur en tant que tel, donc il n'a pas vraiment de nom, mais il est défini comme une "règle syntaxique" . Donc, il devrait s'appeler:
- "la syntaxe de décompression de l'argument clé"
Si vous avez une liste d'arguments, *args
on l'appelle "décompression d'argument" , de la même manière **kwargs
on l'appelle "décompression d'argument de mot clé" .
Si vous l'utilisez sur le côté gauche d'un =
, comme dans a, *middle, end = my_tuple
, vous diriez "déballage des tuples" .
Au total, il existe trois types d'arguments (paramètre unique):
def f(x) # x: positional argument
def f(x, y=0) # y: keyword argument
def f(x, *xs, y=0) # y: keyword-only argument
L' *args
argument est appelé "paramètre de position variable" et **kwargs
est le "paramètre de mot clé variable". Les arguments ne contenant que des mots-clés ne peuvent pas être donnés positionnellement, car un paramètre de position variable prendra tous les arguments que vous transmettez.
La plupart de ces informations se trouvent dans les PEP 0362 et 3102 , ainsi que dans la section Flux de contrôle de la documentation. Il convient toutefois de noter que l'objet de signature de fonction PEP n'est qu'un brouillon et que la terminologie peut n'être que l'idée d'une personne. Mais ce sont de bonnes conditions quand même. :)
Ainsi, les arguments *
et **
ne font que décompresser leurs structures de données respectives:
args = (1, 2, 3) # usually a tuple, always an iterable[1]
f(*args) → f(1, 2, 3)
# and
kwargs = {"a": 1, "b": 2, "c": 3} # usually a dict, always a mapping*
f(**kwargs) -> f(a=1, b=2, c=3)
[1]: Iterables sont des objets qui implémentent la __iter__()
méthode et les mappages sont des objets qui implémentent keys()
et __getitem__()
. Tout objet prenant en charge ce protocole sera compris par les constructeurs tuple()
et dict()
pourra donc être utilisé pour décompresser les arguments.