Non è un operatore in quanto tale, quindi non ha in realtà ha un nome, ma è definito come "regola sintattica" . Quindi dovrebbe essere chiamato:
- "l'argomento della parola chiave decomprimendo la sintassi"
Se hai un elenco di argomenti, *args
si chiama "decompressione dell'argomento" , allo stesso modo **kwargs
si chiama "decompressione dell'argomento della parola chiave" .
Se lo usi sul lato sinistro di un =
, come in a, *middle, end = my_tuple
, diresti "tuple disimballaggio" .
In totale, ci sono tre tipi di argomenti (parametro singolo):
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
argomento si chiama "parametro di posizione variabile" ed **kwargs
è il "parametro di parola chiave variabile". Gli argomenti di sola parola chiave non possono essere proposti in modo posizionale, poiché un parametro di posizione variabile prenderà tutti gli argomenti passati.
La maggior parte di questo può essere trovata nei PEP 0362 e 3102 , nonché nella sezione Flusso di controllo dei documenti. Va notato tuttavia che l'oggetto firma della funzione PEP è solo una bozza e la terminologia potrebbe essere solo un'idea di una persona. Ma sono comunque buone condizioni. :)
Quindi gli argomenti *
e **
decomprimono le rispettive strutture dati:
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 sono oggetti che implementano il __iter__()
metodo e mapping sono oggetti che implementano keys()
e __getitem__()
. Qualsiasi oggetto che supporti questo protocollo sarà compreso dai costruttori tuple()
e dict()
, quindi, potranno essere utilizzati per decomprimere gli argomenti.