如何在不使用全局的情况下引用变量?

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

我有一个使用全局变量的函数,我在代码的其他部分也使用了这些变量,而且这个函数对整个代码的正确功能至关重要。

但是,我发现建议不要使用全局变量,有什么方法可以让我重写函数而不使用全局变量吗?谢谢您

def reset():
    global buildings, my_Car, walkers
        _destroy()

    if len(box2world.bodies) == 0:
        my_Car.destroy_flag = False

        buildings = []
        walkers = []

        create_buildings(bigger_map=False)
        create_pedestrians()
        cars_random_building = random.choice(buildings) #choose a building from the list to generate a car next to the building
        my_Tesla = Car(box2world, position=(cars_random_building.position[0] + 1.55 * cars_random_building.shape[0], cars_random_building.position[1]))

建筑物和步行者列表分别是建筑和步行者类的实例列表。

当我试着不导入globals时,我要么得到一个错误,变量在赋值前被引用,要么我的Box2D世界在重置时崩溃,因为建筑物和步行者的列表没有正确清空,所以它们开始增长,以至于程序崩溃。

非常感谢您

python global-variables box2d
1个回答
1
投票

你可以将所有的全局变量转化为函数参数,并将返回语句用于你的新Tesla,例如: 。

def reset(box2world, buildings, walkers, myCar):
    if not box2world.bodies:
        my_Car.destroy_flag = False
        buildings.clear() 
        walkers.clear() 

        create_buildings(buildings, bigger_map=False)
        create_pedestrians(walkers)
        cars_random_building = random.choice(buildings)
        my_Tesla = Car(box2world, position=(cars_random_building.position[0] + 1.55 * cars_random_building.shape[0], cars_random_building.position[1]))
    return my_Tesla

请注意,内部调用的函数 reset 也需要修改。

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