为什么我的全局变量不是全局变量?

问题描述:

我有以下线在我的剧本的开头:为什么我的全局变量不是全局变量?

global lotRow 
global lotCol 

然后,后来,我设置lotRow和lotCol作为使用函数的字符串。然后,甚至更晚,我做到以下几点:

getIDFromAxes(int(lotRow), int(lotCol)) 

这给了我:

getIDFromAxes(str(lotRow), str(lotCol)) 
NameError: global name 'lotRow' is not defined 

我有高清()在最后打印的“批”的字符串,以确保它们设置,而且由于某些原因,我仍然无法访问它们。

global语句不在脚本的开头;他们进入一个需要访问全局变量的函数。因此,而不是:

global x 
x = 0 

def increment_x(): 
    x += 1 
    return x 

你需要使用:

x = 0 

def increment_x(): 
    global x 
    x += 1 
    return x 

当您试图访问您的全局变量的函数内部时,您需要使用关键字global,否则它将查找本地定义 - 当然哪个不存在。


global global_variable 

def set_var(): 
    global global_variable 

    global_variable = 3 

def print_var(): 
    global global_variable 

    print int(global_variable) 

set_var () 
print_var() 

global_variable = 321 

print_var() 

输出:

3 
321 
+0

但我'global'报表和'getIDFromAxes(INT(lotRow),INT(lotCol))'都在主脚本,因此相同的功能,正确吗? – tkbx

+5

如果他们在相同的功能,为什么你希望他们成为全球?我认为你最好发布一些实际的代码。 –

+0

@DanielRoseman在那里弄了一会儿,忘了getIDFromAxes()'是一个函数。将全局语句移入该函数似乎正在工作。 – tkbx