UnboundLocalError mientras usa + = pero no anexa la lista

No entiendo muy bien la diferencia entre los siguientes dos códigos similares:

def y(x): temp=[] def z(j): temp.append(j) z(1) return temp 

llamando a y(2) devuelve [1]

 def y(x): temp=[] def z(j): temp+=[j] z(1) return temp 

llamando a y(2) devuelve UnboundLocalError: local variable 'temp' referenced before assignment . ¿Por qué + operador genera el error? Gracias

Respondiendo al encabezado, la diferencia entre + y “anexar” es:

 [11, 22] + [33, 44,] 

Te regalaré:

 [11, 22, 33, 44] 

y.

 b = [11, 22, 33] b.append([44, 55, 66]) 

Te regalaré

 [11, 22, 33 [44, 55, 66]] 

Responde al error

Esto se debe a que cuando realiza una asignación a una variable en un ámbito, esa variable se vuelve local a ese scope y oculta cualquier variable de nombre similar en el ámbito externo

El problema aquí es temp+=[j] es igual a temp = temp +[j] . La variable temporal se lee aquí antes de su asignación. Es por esto que está dando este problema. Esto está realmente cubierto en las preguntas frecuentes de Python.

Para más lecturas, haga clic aquí . 🙂

El UnboundLocalError ocurre porque, cuando realiza una asignación a una variable en un ámbito, Python automáticamente considera que esa variable es local a ese scope y oculta cualquier variable de nombre similar en cualquier ámbito externo.

En la función de append , no está realizando una asignación per se y, por lo tanto, no hay ningún error de scope.