我通过声明
来使用list
对象
data = []
在我的代码中,没有初始化它,我写了
data += data2
其中data2
是包含大量数字的另一个list
。
此行发生错误:
local variable 'data' referenced before assignment
我该如何解决这个问题?
答案 0 :(得分:3)
如果您在同一范围内,则无法在初始化数据后获得“在赋值前引用”。
可能是你正在创建一个函数(创建一个新的范围)所以当你说data+=data2
时它意味着
data = data + data2 # so what is data in the right hand side?
因此,如果您想引用全局变量,请使用已有的(全局)数据,您必须明确说出global data
或将其作为参数传递给函数。
答案 1 :(得分:1)
您必须先初始化阵列。以下是如何解决此问题的工作示例。
data = [0]
data2 = [1,2,3,4,5]
print data
data += data2
print data
答案 2 :(得分:1)
您可能想尝试使用data.extend (data2)
而不是使用运算符。
有关将两个列表一起添加的详细讨论,请参阅此问题:Python: take the content of a list and append it to another list
答案 3 :(得分:0)
如果您在功能中使用data += data2
,则需要global data
data = []
data2 = [1,2,3,4]
def add():
globla data
data += data2
add()
print data
或发送data
作为参数
data = []
data2 = [1,2,3,4]
def add(some_data):
some_data += data2
add(data)
print data
答案 4 :(得分:0)
您的问题已在此处的文档中介绍
https://docs.python.org/3/reference/datamodel.html#object.iadd
例如,如果
x
是具有__iadd__()
的类的实例 方法,x += y
相当于x = x.__iadd__(y)
。
所以你看到data
正在反弹(在这种情况下对自己来说),但它仍然算作一项任务。
由于data += data2
出现在未将data
声明为global
的函数范围内,因此假定为data
的局部变量。
def foo():
data.extend(data2) # ok -- global data variable here
def bar():
data = data.__iadd__(data2) # not ok -- local data variable here
def baz():
data += data2 # not ok -- equivalent to bar()