Sospecho que es por consistencia con la notación en estrella en las definiciones de funciones, que es después de todo el modelo para la notación en estrella en llamadas a funciones.
En la definición siguiente, el parámetro *c
se sorber todos los argumentos que no sean de palabras clave posteriores, por lo que, obviamente, cuando f
se llama, la única manera de pasar un valor para d
será como un argumento de palabra clave.
def f(a, b, *c, d=1):
print "slurped", len(c)
(Tales "parámetros de palabras clave de sólo" están sólo está soportado en Python 3. En Python 2 hay es hay manera de asignar valores después de un argumento estrellado, por lo que la anterior es ilegal.)
Por lo tanto, en una función definición, el argumento con estrella debe seguir todos los argumentos posicionales ordinarios. Lo que observó es que la misma regla se ha extendido a las llamadas a funciones. De esta forma, la sintaxis de estrella es consistente para declaraciones de funciones y llamadas a funciones.
Otro paralelismo es que solo puede tener un argumento (único) con estrella en una llamada a función. Lo siguiente es ilegal, aunque uno podría imaginar fácilmente que está permitido.
f(*(1,2), *(3,4))
Puede agregar el último argumento a la tupla antes de desempacar. – JBernardo
Una pregunta interesante. Parece que recuerdo las reglas cambiadas en torno a python 2.5. Antes solía * tener * para poner los '* args' y' ** kwargs' al final, pero no puedo encontrar la entrada del registro de cambios. –