Es ist kein Operator als solcher, hat also eigentlich keinen Namen, ist aber als "syntaktische Regel" definiert . Also sollte es heißen:
- "das schlüsselwort argument entpacken syntax"
Wenn Sie eine Liste von Argumenten haben, *args
, nennt man das „Argument auspacken“ , auf die gleiche Weise **kwargs
heißt „Schlüsselwort - Argument Auspacken“ .
Wenn Sie es auf der linken Seite eines =
wie in verwenden a, *middle, end = my_tuple
, würden Sie "Tupel auspacken" sagen .
Insgesamt gibt es drei Arten von (Einzelparameter-) Argumenten:
def f(x) # x: positional argument
def f(x, y=0) # y: keyword argument
def f(x, *xs, y=0) # y: keyword-only argument
Das *args
Argument heißt "variabler Positionsparameter" und **kwargs
ist der "variable Schlüsselwortparameter". Nur-Schlüsselwort-Argumente können nicht positionsbezogen angegeben werden, da ein variabler Positionsparameter alle von Ihnen übergebenen Argumente akzeptiert.
Das meiste davon finden Sie in den PEPs 0362 und 3102 sowie im Abschnitt Kontrollfluss in den Dokumenten. Es sollte jedoch beachtet werden, dass das Funktionssignaturobjekt PEP nur ein Entwurf ist und die Terminologie möglicherweise nur eine Idee einer Person ist. Aber sie sind trotzdem gute Begriffe. :)
Die Argumente *
und **
entpacken also einfach ihre jeweiligen Datenstrukturen:
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 sind Objekte, die die __iter__()
Methode implementieren , und Mappings sind Objekte, die keys()
und implementieren __getitem__()
. Alle Objekte, die dieses Protokoll unterstützen, werden von den Konstruktoren verstanden tuple()
und dict()
können daher zum Entpacken von Argumenten verwendet werden.