2014-08-28 47 views
0

我一直在使用WinPython编码,使用一个全局变量的程序,这是代码:,这是正常的行为吗?

def main(): 
    global listC 
    listC=[1,2,3,4,5] 

def doSomething(): 
    if listC!=[]: 
     pass 

,我有这样的问题,说如果listC = ...抛出我行!警告说“未定义名称listC”;这个程序实际上编译和执行正常,但我想知道为什么如果我已经声明列表作为一个全局变量的警告。

我想通过以下方式来执行它:

programName.main()  //init the list 
programName.doSomething() //do an operation with the list 
programName.doSomething()  //same as before 
... 

感谢

+0

我必须同意下面的jsbueno,在doSomething()中必须发生其他事情。你发布的代码工作正常。 – whitebeard 2014-08-28 01:48:57

回答

0

这应该是工作......这对我的作品。

def doSomething(): 
    if listC != []: 
     print "success!" 

def main(): 
    global listC 
    listC = [1,2,3,4,5] 
    doSomething() 

>>> main() 
success! 
+0

也是错误的。没有这样的需求 - 只要它在'main'中被声明为全局的并且代码首先运行。 – jsbueno 2014-08-28 01:30:50

+0

@jsbueno当然!不知道我在想什么......那完全正常......改变了我的答案...... – whitebeard 2014-08-28 01:37:50

1

随着代码的部分,你向我们展示,它应该工作 - 但是,因为你得到的错误,这是怎么回事是你在某个时刻作出的分配listCdoSomething函数的主体中。

如果有任何此类转让,Python将视listC变量作为本地 到doSomething - 除非你把其列为在函数的beggining全球 - 当然,你也必须把它宣布为全球在此函数中初始化它 - main,并确保初始化代码在调用doSomething之前运行。

def main(): 
    global listC 
    listC=[1,2,3,4,5] 

def doSomething(): 
    global listC 
    if listC != []: 
     print "success!" 
    # the following statement would trigger a NameError above, if not for the "global": 
    listC = [2,3]