2013-01-18 31 views
1

我正在學習Python和時遇到的全局變量/列表的問題。我寫河內程序的基本手冊塔,這裏是目前的計劃:Python的全局列表

pilar1 = [5,4,3,2,1,0] 
pilar2 = [0,0,0,0,0,0] 
pilar3 = [0,0,0,0,0,0] 

def tower_of_hanoi(): 

    global pillar1 
    global pillar2 
    global pillar3 

    print_info() 

def print_info(): 

    global pillar1 
    global pillar2 
    global pillar3 

    for i in range(4,-1,-1): 
     print(pillar1[i], " ", pillar2[i], " ", pillar3[i]) 

我已經嘗試了一些變化,但我每次得到的錯誤「NameError時間:全局名稱‘pillar1’沒有定義」。

什麼是處理在此設置一個全局列表的最佳方式?如果可能的話,我寧願只使用一個源文件。謝謝!

+4

沒有那些'global'陳述做任何事情。擺脫他們。 – delnan

+3

注意,全局通常是一個壞主意 - 值傳遞到你的函數並返回值 - 全局造成更多的問題比解決的。 –

回答

10

這是因爲你已經「宣佈」作爲pilar1,不pillar1

+0

啊,是的。這總是很簡單的錯誤。謝謝! – Nathan

+0

考慮接受這個解決方案。 – Johncl

6

你遇到的問題是pilar不是一樣pillar。 之後你解決這個問題,你將不再需要global聲明:

pilar1 = [5,4,3,2,1,0] 
pilar2 = [0,0,0,0,0,0] 
pilar3 = [0,0,0,0,0,0] 

def tower_of_hanoi():  
    print_info() 

def print_info():  
    for i in range(4,-1,-1): 
     print(pillar1[i], " ", pillar2[i], " ", pillar3[i]) 

只有你需要使用全局的時間,如果你在一個非全球範圍內分配一個全局變量,如函數定義:

# global variable, can be used anywhere within the file since it's 
# declared in the global scope 
my_int = 5 

def init_list(): 
    # global variable, can be used anywhere within the file after 
    # init_list gets called, since it's declared with "global" keyword 
    global my_list 
    my_list = [1, 2, 3] 

def my_function(): 
    # local variable, can be used only within my_function's scope 
    my_str = "hello" 

    # init's global "my_list" variable here, which can then be used anywhere 
    init_list() 
    my_list.append(5) 

my_function() 
print(my_list) 

但是你不應該使用全局變量太多,而是使用函數參數是傳遞價值。

+1

一個與這一個輕微的問題,*定義*意味着只有當你犯了一個新的全局變量,這是不正確的,這是* *分配給全球需要的'global'關鍵字。 –

+0

這樣一個小錯誤,我甚至沒有信心,但我會相信你,並已修復它。接得好 :) – 2013-01-18 16:00:50