函数不改变全局变量
函数不改变全局变量
我的代码如下:
done = False def function(): for loop: code if not comply: done = True #假设代码进入了这个if语句 while done == False: function()
由于某种原因,当我的代码进入if语句后,它在完成function()后没有退出while循环。
但是,如果我将代码编写为:
done = False while done == False: for loop: code if not comply: done = True #假设代码进入了这个if语句
...它会退出while循环。这是怎么回事?
我确保我的代码进入了if语句。我还没有运行调试器,因为我的代码有很多循环(非常大的二维数组),而且由于调试工作非常繁琐,我已经放弃了。为什么当它在一个函数中时,"done"没有被改变呢?
在Python中,如果想要在函数中修改全局变量,需要使用global
关键字,否则在函数内部使用类似done = True
这样的语句会声明一个新的局部变量done
,而不是修改全局变量。
具体的解决方法是在函数内部使用global done
来声明done
是一个全局变量,然后就可以在函数中修改这个全局变量了。下面是一个示例代码:
done = False def function(): global done for loop: code if not comply: done = True
如果想要了解更多关于global
语句的信息,可以参考官方文档。
(Function not changing global variable)这个问题的出现的原因是在函数中对全局变量进行修改时,需要使用global关键字来告诉解释器你正在引用全局变量done
,否则它会创建一个新的变量,只能在函数内部进行读取。
解决方法是在函数内部使用global关键字来声明要修改的全局变量done
,这样就能够在函数中正确地修改全局变量的值。
下面是修改后的代码:
done=False def function(): global done for loop: code if not comply: done = True
通过在函数内部使用global done
,我们告诉解释器我们要修改的是全局变量done
,而不是创建一个新的变量。这样,当函数执行时,会正确地修改全局变量done
的值。
问题的原因是函数会创建自己的命名空间,这意味着函数内部的done
与第二个示例中的done
是不同的。解决方法是使用global done
来使用第一个done
而不是创建一个新的done
。
在Python中,当我们在函数内部引用一个变量时,Python会默认将其视为局部变量。这就是为什么在函数中修改一个变量的值不会影响到全局变量的原因。为了在函数中修改全局变量的值,我们需要使用global
关键字来声明这个变量是全局变量。
在上面的例子中,我们可以看到在函数中使用global done
来声明done
是一个全局变量。这样,在函数中对done
的修改就会影响到全局变量的值。
如果你想了解更多关于如何使用global
的说明,你可以在这里找到更多的信息。