函数调用不会更新全局变量
这个问题探讨了一个编程挑战,其中最初指定为 False 的全局变量不更新在函数内引用时,t 会被更新。尽管函数改变了全局变量的值,但主程序的循环继续执行,导致无限循环。理解这个问题需要深入研究命名空间和变量作用域的概念。
命名空间和变量作用域
在编程中,每个函数和模块都会创建自己的命名空间。命名空间是在该范围内已知且可访问的名称(变量、函数等)的集合。当在函数内部为变量赋值时,即使存在同名的全局变量,也会在函数的命名空间中创建一个新变量。
使用全局变量
在这种情况下,当函数内引用名为“done”的全局变量时,会在函数的命名空间中创建一个具有相同名称的新局部变量。这种局部“完成”与全局“完成”不同。更改局部“done”对全局变量没有影响。
解决方案
要克服这个问题,必须使用 global 关键字来显式引用内部的全局变量的功能。通过使用全局done,该函数告诉解释器访问全局“done”变量,而不是创建一个新的本地变量。
修改代码
修复该问题,函数可以修改如下:
def function():
global done
for loop:
code
if not comply:
done = True
解释
使用全局done在函数内使用的变量和全局变量之间建立了联系。当函数修改done的值时,它会更新最初引用的同一全局变量。这确保了当函数将 did 设置为 True 时,主程序的 while 循环将按预期终止。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3