Python中的局部赋值可能意外隐藏全局变量
示例代码:
arrGlobalArray = [] def AddItemToGlobalArray(objItem) : arrGlobalArray.append(objItem) #End Sub def TestLoop() : print("Entered TestLoop()") nLoopCount = 5 for i in range(0, nLoopCount) : print(f"Loop {i+1}/{nLoopCount}:") # This creates a local array named "arrGlobalArray" arrGlobalArray = [] AddItemToGlobalArray(245) print(f"arrGlobalArray={arrGlobalArray}") #Next #End Sub if __name__ == "__main__" : TestLoop() #End If
由于TestLoop()函数中的arrGlobalArray = []语句被解释为局部变量定义,导致全局数组arrGlobalArray在TestLoop()函数中被屏蔽。此时的输出为:
Entered TestLoop()
Loop 1/5:
arrGlobalArray=[]
Loop 2/5:
arrGlobalArray=[]
Loop 3/5:
arrGlobalArray=[]
Loop 4/5:
arrGlobalArray=[]
Loop 5/5:
arrGlobalArray=[]修改代码:
arrGlobalArray = [] def AddItemToGlobalArray(objItem) : arrGlobalArray.append(objItem) #End Sub def TestLoop() : print("Entered TestLoop()") nLoopCount = 5 for i in range(0, nLoopCount) : print(f"Loop {i+1}/{nLoopCount}:") # This won't create local array arrGlobalArray.clear() AddItemToGlobalArray(245) print(f"arrGlobalArray={arrGlobalArray}") #Next #End Sub if __name__ == "__main__" : TestLoop() #End If
此时输出正确:
Entered TestLoop()
Loop 1/5:
arrGlobalArray=[245]
Loop 2/5:
arrGlobalArray=[245]
Loop 3/5:
arrGlobalArray=[245]
Loop 4/5:
arrGlobalArray=[245]
Loop 5/5:
arrGlobalArray=[245]页面版本: 2, 最后编辑于: 19 Dec 2025 12:06





