使用+ =但不附加列表时的UnboundLocalError

时间:2015-12-08 03:57:52

标签: python list append

我不太明白以下两个相似代码之间的区别:

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

调用y(2)会返回[1]

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

调用y(2)会返回UnboundLocalError: local variable 'temp' referenced before assignment。为什么+运算符会生成错误?感谢

2 个答案:

答案 0 :(得分:9)

回答标题,+和&#34之间的差异;追加"是:

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

会给你:

[11, 22, 33, 44]

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

会给你

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

回答错误

  

这是因为当您对作用域中的变量进行赋值时,该变量将成为该作用域的局部变量并隐藏外部作用域中任何类似命名的变量

此处的问题是temp+=[j]等于temp = temp +[j]。临时变量在分配之前在此处读取。这就是它提出这个问题的原因。这实际上包含在python常见问题解答中。

如需进一步阅读,请点击{{3}}。 :)

答案 1 :(得分:3)

UnboundLocalError发生的原因是,当您对作用域中的变量进行赋值时,Python会自动将该变量视为该范围的本地并隐藏任何类似命名的变量在任何外部范围内。

append函数中,您没有进行本身的分配,因此没有范围错误。