f
esperan 3 argumentos (x
, y
, z
, en ese orden).
Suponer L = [1,2]
. Cuando llame al f(3, *L)
, lo que hace python detrás de escena, es llamar al f(3, 1, 2)
, sin conocer realmente la longitud de L
.
¿Qué ocurre si L
fue en su lugar [1,2,3]
?
Entonces, cuando se llama f(3, *L)
, que va a terminar llamando f(3,1,2,3)
, que será un error porque f
está esperando exactamente 3 argumentos y que le dio 4.
Ahora, supongamos L=[1,2]1. Look at what happens when you call
F`:
>>> f(3,*L) # works fine
>>> f(*L) # will give you an error when f(1,2) is called; insufficient arguments
Ahora, usted sabe implícitamente cuando se llama f(*L, 3)
que 3 serán asignados a z
, pero Python no sabes. Solo se sabe que el último j
muchos elementos de la entrada a f
se definirá por los contenidos de L
. Pero dado que no conoce el valor de len(L)
, no puede hacer suposiciones sobre si f(*L,3)
tendría la cantidad correcta de argumentos. Sin embargo, este no es el caso con f(3,*L)
. En este caso, Python sabe que todos los argumentos, EXCEPTO el primero, estarán definidos por los contenidos de L
.
Pero si ha nombrado los argumentos f(x=1, y=2, z=3)
, entonces los argumentos asignados por nombre se vincularán primero. Solo entonces están vinculados los argumentos posicionales. Entonces haces f(*L, z=3)
. En ese caso, z
se une primero a 3
y, a continuación, los otros valores quedan vinculados.
Ahora interesante, si lo hizo f(*L, y=3)
, eso le dará un error para intentar asignar a y
dos veces (una vez con la palabra clave, una vez más con la posición)
espero que esto ayude
'f (* a, 3)' ahora funciona en Python 3.5 –