Python中的全局变量,这是正常行为吗?

时间:2014-08-28 00:25:25

标签: python

我一直在使用WinPython编写使用全局变量的程序,这是代码:

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

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

我遇到的问题是,如果listC!= ...这句话会向我发出一条警告:“未定义名称列表C”;这个程序实际上是正常编译和执行的,但是我想知道为什么在我将列表声明为全局变量时会出现警告。

我想以下列方式执行它:

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

由于

2 个答案:

答案 0 :(得分:1)

使用您向我们展示的代码部分,应该工作 - 但是,由于您收到错误,因此您正在listC函数正文中的某个位置对doSomething进行分配。

如果有任何此类赋值,Python会将listC变量视为本地变量 到doSomething - 除非你把它列为函数开头的全局列表 - 当然,你还必须在初始化它的函数中将它声明为全局 - 在这种情况下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]

答案 1 :(得分:0)

这应该有效......对我有用。

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

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

>>> main()
success!