2013-01-18 30 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