我正在尝试更改函数中全局变量的值,但是即使在尝试使用/更改变量之前指定了“global”,这种情况也不会发生。
这是我所做的抽象(实际代码很长):
testVariable = 0
def functionExample():
global testVariable
# other code
testVariable = 5
print(testVariable) # this prints 5
functionExample()
print(testVariable) # this prints 0
如果您自己运行此代码,它可能会正确地将 5 分配给“testVariable”。但是,在我的代码中它没有这样做。如果这有帮助的话,这是实际的代码(该代码适用于策略游戏):
keepPos = ("N/A","N/A")
def createBuilding3x3(mPos,coinCounterLocal,mouseSquareX,mouseSquareY,selectedBuilding,keepPlaced):
global keepPos
if keepPlaced != True:
gridSquareEmpty = True
for x in range (-1,2):
for y in range (-1,2):
if SSA[mouseSquareX+x][mouseSquareY+y] != 2:
gridSquareEmpty = False
for i in buildingGroup:
if (mouseSquareX+x,mouseSquareY+y) == (i.getTileX(),i.getTileY()):
gridSquareEmpty = False
if gridSquareEmpty == True:
for x in range (-1,2):
for y in range (-1,2):
if (x,y) != (0,0):
invisibleBuilding = Building(mouseSquareX+x,mouseSquareY+y,invisibleImage,0)
buildingGroup.add(invisibleBuilding)
newBuilding = Building(mouseSquareX,mouseSquareY,imageList[selectedBuilding],0)
buildingGroup.add(newBuilding)
keepPos = (mouseSquareX,mouseSquareY)
print(keepPos) # this returns (mouseSquareX,mouseSquareY)
print("The amount of active buildings is",len(buildingGroup))
return True
if keepPlaced == True:
return True
return False
# the function is run during the program, after which:
print(keepPos) # this returns ("N/A","N/A")
我的蟒蛇被诅咒了吗?或者我只是忽略了一些事情?如果您对问题有任何想法,谢谢您。抱歉,如果这是重复的,但我找不到任何答案。
这是一个最小的例子
keepPos = ("N/A","N/A")
def createBuilding3x3(mPos,coinCounterLocal,mouseSquareX,mouseSquareY,selectedBuilding,keepPlaced):
global keepPos
if keepPlaced != True:
gridSquareEmpty = True
# for x in range (-1,2):
# for y in range (-1,2):
# if SSA[mouseSquareX+x][mouseSquareY+y] != 2:
# gridSquareEmpty = False
# for i in buildingGroup:
# if (mouseSquareX+x,mouseSquareY+y) == (i.getTileX(),i.getTileY()):
# gridSquareEmpty = False
# THE QUESTION ONLY APPLIES IF GRIDSQUARE === TRUE so this should match that case
if gridSquareEmpty == True:
# for x in range (-1,2):
# for y in range (-1,2):
# if (x,y) != (0,0):
# invisibleBuilding = Building(mouseSquareX+x,mouseSquareY+y,invisibleImage,0)
# buildingGroup.add(invisibleBuilding)
# newBuilding = Building(mouseSquareX,mouseSquareY,imageList[selectedBuilding],0)
# buildingGroup.add(newBuilding)
keepPos = (mouseSquareX,mouseSquareY)
print(keepPos) # this returns (mouseSquareX,mouseSquareY)
buildingGroup = []
print("The amount of active buildings is",len(buildingGroup))
return True
if keepPlaced == True:
return True
return False
createBuilding3x3([0,0],0, 3,3,False,False)
# the function is run during the program, after which:
print(keepPos) # this returns (3,3)
我所做的只是注释掉你的其他内容,这样 gridSquareEmpty 一定是真的
并且不去建造一些东西
全局设置完全按照您的预期设置,因此表明问题不是您的“全局”,而是您的其他逻辑...大概 gridSquare 空最终被设置为 False,所以它永远不会设置它...