使用 += 但未附加列表时出现 UnboundLocalError [重复]
Posted
技术标签:
【中文标题】使用 += 但未附加列表时出现 UnboundLocalError [重复]【英文标题】:UnboundLocalError while using += but not append list [duplicate] 【发布时间】:2016-03-12 21:25:48 【问题描述】:我不太明白下面两个类似代码的区别:
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
。为什么+
运算符会生成错误?谢谢
【问题讨论】:
【参考方案1】:标题的答案,+和“追加”的区别是:
[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 常见问题解答中。
如需进一步阅读,请点击here。 :)
【讨论】:
您的第一部分显示+=
更像extend
而不是append
。但是+=
并不完全像temp=temp+[]
。在一个id
更改,在另一个它没有。 iadd
文档声称 x.__iadd__(y) <==> x+=y
。但显然,范围规则首先适用。所以这种等价也不准确。【参考方案2】:
UnboundLocalError
的出现是因为,当您对作用域中的变量进行赋值时,Python 会自动将该变量视为 该作用域的本地变量,并隐藏任何类似命名的变量外部范围。
在append
函数中,本身没有进行赋值,因此没有范围错误。
【讨论】:
以上是关于使用 += 但未附加列表时出现 UnboundLocalError [重复]的主要内容,如果未能解决你的问题,请参考以下文章
使用 microsoft graph api c# 创建在线会议时出现 404 错误,但未登录 AzureActiveDirectory
尝试在 ANDROID 资源中使用 <!ENTITY 时出现错误:“实体已被引用,但未声明。”