UnboundLocalError while using += but not append list [duplicate]

会有一股神秘感。 提交于 2019-12-19 23:58:10

问题


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

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!