首页 > 解决方案 > python - 为什么在函数中清空列表并附加到它会给出空列表?

问题描述

这段代码在 print 语句中给出了空列表:

X = []
Y = []
Z = []


def DoStuff(a,b,c):
    X = []
    Y = []
    Z = []
    X.append(a)
    Y.append(b)
    Z.append(c)

DoStuff(1,2,3)

print('X:{0}\nY:{1}\nZ:{2}'.format(X,Y,Z))

我知道我可以通过添加返回语句来“修复”:

X = []
Y = []
Z = []


def DoStuff(a,b,c):
    X = []
    Y = []
    Z = []
    X.append(a)
    Y.append(b)
    Z.append(c)
    return X, Y, Z

X, Y, Z = DoStuff(1,2,3)

print('X:{0}\nY:{1}\nZ:{2}'.format(X,Y,Z))

但是为什么第一个代码给出了空列表?

标签: pythonpython-3.x

解决方案


这是因为它们是局部变量。这意味着它们的生命周期位于功能块的开始和结束之间。即使它们与全局变量具有相同的名称,当它们在块内时,它们也会“隐藏”全局变量。

所以实际上你并没有“清空”列表。如果要修改功能块中的全局变量,可以将它们声明为global foo块内。但是,这种做法在社区中是非常不鼓励的。


推荐阅读