2012-09-30 145 views
20

我的代码如下:功能不改变全局变量

done = False 

def function(): 
    for loop: 
     code 
     if not comply: 
      done = True #let's say that the code enters this if-statement 

while done == False: 
    function() 

出于某种原因,当我的代码进入if语句,它与函数完成之后,在没有退出while循环()。

,但如果我这样的代码是:

done = False 

while done == False: 
    for loop: 
    code 
    if not comply: 
     done = True #let's say that the code enters this if-statement 

...退出while循环。这里发生了什么?

我确定我的代码输入了if语句。我还没有运行调试器,因为我的代码有很多循环(相当大的二维数组),我放弃了调试,因为它非常繁琐。在功能中,“完成”怎么没有被改变?

+0

今天很多Python全局变量的问题。 – icktoofay

+0

谢谢你们!简直不敢相信,但它绝对是与Java/C++不同的触摸 – cYn

回答

30

你的问题是功能创建自己的命名空间,这意味着done功能是不同于done在第二个示例中。使用global done来使用第一个done而不是创建一个新的。

def function(): 
    global done 
    for loop: 
     code 
     if not comply: 
      done = True 

如何使用global的解释可以发现here

4
done=False 
def function(): 
    global done 
    for loop: 
     code 
     if not comply: 
      done = True 

您需要使用global关键字,让译员知道你指的是全局变量done,否则它会创建一个只能在函数中读取的不同人。

2

使用global,只有这样,你可以修改全局变量,否则像done = True在函数内部声明将宣布名为done一个新的局部变量:

done = False 
def function(): 
    global done 
    for loop: 
     code 
     if not comply: 
      done = True 

了解更多关于the global statement