I do not quite understand the difference between the following two similar codes:
def y(x):
temp=[]
def z(j):
temp.append(j)
z(1)
return temp
calling y(2)
returns [1]
def y(x):
temp=[]
def z(j):
temp+=[j]
z(1)
return temp
calling y(2)
returns UnboundLocalError: local variable 'temp' referenced before assignment
. Why +
operator generates the error? Thanks
Answer to the heading, the difference between + and "append" is:
[11, 22] + [33, 44,]
will give you:
[11, 22, 33, 44]
and.
b = [11, 22, 33]
b.append([44, 55, 66])
will give you
[11, 22, 33 [44, 55, 66]]
Answer to the error
This is because when you make an assignment to a variable in a scope, that variable becomes local to that scope and shadows any similarly named variable in the outer scope
The problem here is temp+=[j]
is equal to temp = temp +[j]
. The temp variable is read here before its assigned. This is why it's giving this problem. This is actually covered in python FAQ's.
For further readings, click here. :)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With