Ceci est le bit correspondant du grammar:
arglist: (argument ',')* (argument [',']
|'*' test (',' argument)* [',' '**' test]
|'**' test)
La première ligne ici permet de mettre une virgule après le dernier paramètre lorsque vous n'utilisez varargs/kwargs (ce qui est la raison pour laquelle votre premier exemple fonctionne) . Cependant, vous n'êtes pas autorisé à placer une virgule après le paramètre kwargs s'il est spécifié, comme indiqué dans les deuxième et troisième lignes.
D'ailleurs, voici une chose intéressante montre la grammaire:
Ce sont à la fois juridique:
f(a=1, b=2, c=3,)
f(*v, a=1, b=2, c=3)
mais ce n'est pas:
f(*v, a=1, b=2, c=3,)
Il est logique de ne pour autoriser une virgule après **kwargs
, car il doit toujours être le dernier paramètre. Je ne sais pas pourquoi les concepteurs de la langue ont choisi de ne pas autoriser mon dernier exemple - peut-être un oubli?
Lorsque j'essaye ce code sous Python 2.6, j'obtiens une erreur de syntaxe à la ligne 19 (la deuxième Working). –
Merci, correction d'une faute de frappe mineure dans l'exemple # 2. – user213060
Et (non sans importance): pourquoi voudriez-vous cette virgule (sauf pour la recherche de ce comportement)? – ChristopheD