问题
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
回答1:
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. :)
回答2:
The UnboundLocalError
occurs because, when you make an assignment to a variable in a scope, that variable is automatically considered by Python to be local to that scope and shadows any similarly named variable in any outer scope.
In the append
function, you are not making an assignment per se, and therefore there is no scope error.
来源:https://stackoverflow.com/questions/34147753/unboundlocalerror-while-using-but-not-append-list