函数不改变全局变量
- 2025-02-08 08:52:00
- admin 原创
- 45
问题描述:
我的代码如下:
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 语句。我还没有运行调试器,因为我的代码有很多循环(相当大的二维数组),而且我放弃了调试,因为它太乏味了。为什么“done”在函数中没有被改变?
解决方案 1:
您的问题是函数会创建自己的命名空间,这意味着done
函数中的命名空间与done
第二个示例中的命名空间不同。请global done
使用第一个命名空间,done
而不是创建一个新的命名空间。
def function():
global done
for loop:
code
if not comply:
done = True
关于如何使用的说明可以在这里global
找到
解决方案 2:
done=False
def function():
global done
for loop:
code
if not comply:
done = True
您需要使用 global 关键字让解释器知道您引用全局变量done
,否则它将创建一个只能在函数中读取的不同变量。
解决方案 3:
使用,只有这样你才能修改全局变量,否则函数内部的global
语句将声明一个名为的新局部变量:done = True
`done`
done = False
def function():
global done
for loop:
code
if not comply:
done = True
阅读有关全球声明的更多信息。
解决方案 4:
使用class
而不是global
:
处理(不使用)全局变量的另一种方法是将希望成为全局的函数和变量包装在一个类中。
虽然对于这个特定情况来说这有点繁重 - 但类为项目添加了大量功能和灵活性。(个人)强烈推荐。
例如:
class Processor():
"""Class container for processing stuff."""
_done = False
def function(self):
"""A function which processes stuff."""
# Some code here ...
self._done = True
# See the flag changing.
proc = Processor()
print('Processing complete:', proc._done)
proc.function()
print('Processing complete:', proc._done)
输出:
Processing complete: False
Processing complete: True
相关推荐
热门文章
项目管理软件有哪些?
热门标签
云禅道AD