mi chiedo perché questo è uno SyntaxError in Python 3.4:SyntaxError con il passare ** kwargs e finali virgola
some_function(
filename = "foobar.c",
**kwargs,
)
Funziona quando si rimuove la virgola finale dopo **kwargs
.
mi chiedo perché questo è uno SyntaxError in Python 3.4:SyntaxError con il passare ** kwargs e finali virgola
some_function(
filename = "foobar.c",
**kwargs,
)
Funziona quando si rimuove la virgola finale dopo **kwargs
.
Come sottolineato da vaultah (che per qualche motivo non si è preoccupato di postare una risposta), questo era reported on the issue tracker ed è stato modificato da allora. La sintassi funzionerà bene a partire da Python 3.6.
essere esplicito, sì, voglio permettere finale virgola anche dopo
*args
o**kwds
. Ed è quello che fa la patch. - Guido van Rossum
La ragione per cui è stato originariamente annullato perché **kwargs
era l'ultimo elemento consentito in un elenco di argomenti - niente poteva venire dopo; tuttavia, un ,
sembra che ci potrebbe essere più seguito.
che ha cambiato in modo che ora possiamo chiamare con più dicts parole chiave:
some_func(a, b, **c, **d,)
Per l'amor di coerenza, le virgole finali sono ora supportati in entrambe le definizioni e le chiamate di funzioni. Questo è veramente utile quando si hanno diversi argomenti o pochi lunghi argomenti, e quindi la linea logica è divisa su più linee fisiche.
Le virgole sono facoltative in entrambe le posizioni.
Grazie. Sono curioso della parte '** c, ** d'. In che modo Python sa quali argomenti di parole chiave inserire in 'c' e quali in' d'? –
@NiklasR: Siamo spiacenti, ha avuto quella parte sbagliata, risposta aggiornata. –
http://bugs.python.org/issue9232 – vaultah