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

时间:2020-05-20 12:27:54

标签: python global-variables box2d

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

但是,我发现建议不要使用全局变量,是否可以在不使用全局变量的情况下重写函数?非常感谢

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]))

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

当我尝试不导入全局变量时,我得到一个错误,即在赋值之前引用了变量,或者在重置期间我的Box2D世界崩溃了,因为建筑物和步行者的列表没有正确清空,因此它们开始增长到程序崩溃了。

非常感谢您

1 个答案:

答案 0 :(得分:1)

您可以将所有全局变量转换为函数参数,并将return语句用于新的Tesla。 G。 :

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内部调用的函数也需要修改。