2012-09-30 249 views
0

我有以下線在我的劇本的開頭:爲什麼我的全局變量不是全局變量?

global lotRow 
global lotCol 

然後,後來,我設置lotRow和lotCol作爲使用函數的字符串。然後,甚至更晚,我做到以下幾點:

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

這給了我:

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

我有高清()在最後打印的「批」的字符串,以確保它們設置,而且由於某些原因,我仍然無法訪問它們。

回答

4

global語句不在腳本的開頭;他們進入一個需要訪問全局變量的函數。因此,而不是:

global x 
x = 0 

def increment_x(): 
    x += 1 
    return x 

你需要使用:

x = 0 

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

當您試圖訪問您的全局變量的函數內部時,您需要使用關鍵字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