即使使用全局命令,Python 也不在函数中使用全局变量

问题描述 投票:0回答:1

我正在尝试更改函数中全局变量的值,但是即使在尝试使用/更改变量之前指定了“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")

我的蟒蛇被诅咒了吗?或者我只是忽略了一些事情?如果您对问题有任何想法,谢谢您。抱歉,如果这是重复的,但我找不到任何答案。

python function global
1个回答
0
投票

这是一个最小的例子

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,所以它永远不会设置它...

© www.soinside.com 2019 - 2024. All rights reserved.