2015-10-06 28 views
1

请原谅,如果之前已经询问过,但我无法弄清楚为什么这不起作用。我已经Google搜索了好几个小时,为了记录。 我不断收到全局变量错误。我宣布我的全局如此:在函数之外声明全局变量

###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(这就是为什么我用一种简单的方式来声明全局变量),我不知道如何让所有函数中的列表都能被访问。

非常感谢! - Zach

+0

如果你声明了全局变量,你需要使用'global'关键字:'global foo = []' – MattDMo

+0

另外,使用字典比使用类似命名的列表要好得多:'sprites = {“AB”:[],“AM”:[],...}' – MattDMo

回答

2

为了使用全局,您需要在您的方法中实际明确地设置它。下面是一个应该帮助你的例子:

glb = "I am global" 

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

foo() 
# Outputs: I changed you mr. global 
print(glb) 
1

除了全局关键字,你的变量名称需要匹配。您定义了global_AB,然后参考AB