Esta es la parte relevante de la grammar:
arglist: (argument ',')* (argument [',']
|'*' test (',' argument)* [',' '**' test]
|'**' test)
La primera línea aquí permite poner una coma después del último parámetro cuando no se utiliza varargs/kwargs (esta es la razón por su primer ejemplo funciona) . Sin embargo, no está permitido colocar una coma después del parámetro kwargs si está especificado, como se muestra en la segunda y tercera líneas.
Por cierto, aquí es una cosa interesante se muestra por la gramática:
Estos son legales:
f(a=1, b=2, c=3,)
f(*v, a=1, b=2, c=3)
pero esto no es:
f(*v, a=1, b=2, c=3,)
tiene sentido no para permitir una coma después de **kwargs
, ya que siempre debe ser el último parámetro. No sé por qué los diseñadores de idiomas decidieron no permitir mi último ejemplo, tal vez un descuido.
Cuando pruebo este código en Python 2.6, obtengo un error de sintaxis en la línea 19 (el segundo trabajo). –
Gracias, error tipográfico corregido en el ejemplo n. ° 2. – user213060
Y (no sin importancia): ¿por qué querrías esta coma extravagante (a excepción de investigar este comportamiento)? – ChristopheD