我的代码如下:
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语句时,它在使用function()完成后不会退出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语句。我还没有运行调试器,因为我的代码有很多循环(相当大的2d数组),我放弃了调试,因为它太单调了。为什么“完成”在函数中不被更改?
4条答案
按热度按时间lf3rwulv1#
您的问题是函数创建自己的名称空间,这意味着
done
函数中的值与done
在第二个例子中。使用global done
使用第一个done
而不是创建一个新的。说明如何使用
global
可以在这里找到iibxawm42#
您需要使用global关键字让解释器知道您引用了全局变量
done
,否则它将创建一个只能在函数中读取的另一个。yqkkidmi3#
使用
global
,只有这样,才能修改全局变量,否则可以修改如下语句done = True
函数内部将声明一个名为done
:阅读更多有关全球声明的信息。
jei2mxaa4#
使用类而不是全局:
处理(而不是使用)全局变量的另一种方法是将希望全局的函数和变量 Package 到类中。
虽然这对于这个特定的案例来说有点沉重,但是类为项目添加了大量的功能和灵活性(个人)强烈推荐。
例如:
输出: