我一直在使用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
...
由于
答案 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!