python - 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))
但是为什么第一个代码给出了空列表?
解决方案
这是因为它们是局部变量。这意味着它们的生命周期位于功能块的开始和结束之间。即使它们与全局变量具有相同的名称,当它们在块内时,它们也会“隐藏”全局变量。
所以实际上你并没有“清空”列表。如果要修改功能块中的全局变量,可以将它们声明为global foo
块内。但是,这种做法在社区中是非常不鼓励的。
推荐阅读
- android - 套接字发送缓冲区队列卡在三星中
- python - `in` 对 `__contains__` 有多少优化?
- python - 如何将复杂数组从 python 导出到 IDL 的 tiff 文件
- android - 基于多个实时数据值的 Android 逻辑
- sql-server - SQL Server 识别匹配的借方和贷方
- asterisk - 无法让 RTPEngine 与 Kamailio 和 Asterisk 一起使用
- ios - 拍摄照片后,Ionic cordova 相机插件间歇性崩溃(使用 Firebase 图像上传)
- r - 谷歌底图和 geom_sf 与 R 中的自定义 geom_image 符号和注释标签对齐
- maven - 使用 maven 命令将工件从 Artifactory 服务器下载到本地的命令
- sql - 如何计算每年占总数的百分比