Объявление глобальных переменных в Python вне функций

Простите, если об этом уже спрашивали, но я не могу понять, почему это не работает. Я часами гуглил, для протокола. Я продолжаю получать ошибку глобальной переменной. Я объявляю свои глобальные переменные как таковые:

###Sprites###
global_AB = []
global_AM = []
global_AD = []
global_BB = []
global_CO = []
global_DK = []
global_FB = []
global_O = []
global_R = []
global_SS = []
global_S = []
global_WU = []

Но когда я обращаюсь к нему внутри функции (после того, как эта функция установила его)

#Loads all of the sprites and backgrounds, I recommend you close this if looking at the code.
def loadImages():
    for i in range(0, (len(spriteNames) - 1)):
        for z in range(0, numSprites[i]):
            if i == 0:
                AB.append(pygame.image.load(spriteNames[i] + str(z) + ".png_scaled.png"))
            elif i == 1:
                AM.append(pygame.image.load(spriteNames[i] + str(z) + ".png_scaled.png"))
            elif i == 2:
                AD.append(pygame.image.load(spriteNames[i] + str(z) + ".png_scaled.png"))
           ... 8 more of these

При доступе к блит-изображению я получаю сообщение об ошибке, говорящее, что оно не определено (я пытался скопировать AB[0] на поверхность),

Если вы знаете альтернативный способ, пожалуйста, сообщите мне. Раньше я кодировал в JASS (поэтому у меня есть странный способ объявления глобальных переменных), и я не знаю, как еще сделать, чтобы списки были доступны во всех функциях.

Большое спасибо! - Зак


person Zach Handley    schedule 06.10.2015    source источник
comment
Если вы объявляете глобальные переменные, вам нужно использовать ключевое слово global: global foo = []   -  person MattDMo    schedule 06.10.2015
comment
Кроме того, вам гораздо лучше использовать словарь, чем кучу списков с одинаковыми названиями: sprites = {"AB": [], "AM": [], ... }   -  person MattDMo    schedule 06.10.2015


Ответы (2)


Чтобы использовать глобальную переменную, вам нужно явно указать ее в своем методе. Вот пример, который должен вам помочь:

glb = "I am global"

def foo():
    global glb
    glb = "I changed you mr. global"

foo()
# Outputs:  I changed you mr. global
print(glb) 
person idjaw    schedule 06.10.2015

В дополнение к ключевому слову global имена ваших переменных должны совпадать. Вы определяете global_AB, а затем ссылаетесь только на AB.

person S. Ellis    schedule 06.10.2015