假设我有一个文件:
# main.py
import foo
my_global = "global variable"
foo.print_global()
还有另一个:
# foo.py
def print_global():
global my_global
print(my_global)
当我运行 main.py
时,为什么会出现 NameError: name 'my_global' is not Defined
?
如何使 my_global
可用于 foo.py
?尝试一下是不是一个坏主意 - 也许我应该在这种情况下始终将值作为函数参数传递?
最佳答案
Python 没有进程范围的全局变量,只有模块级的全局变量。 foo.print_global
查看 foo.my_global
,而不是您设置的 main.my_global
。也就是说,print_global
用于全局变量的范围是在定义 print_global
时确定的,而不是在调用它时确定的。 >.
这将达到您的预期。
import foo
foo.my_global = "global variable"
foo.print_global()
请注意,foo.py
不应依赖其他人在调用 print_global
之前创建其全局变量;至少,foo.py
应该将 my_global
初始化为 None
(如果不是其他默认值)。
另请注意,上面的解决方案与不同
from foo import my_global
my_global = "..."
这会在当前模块中创建一个新的全局名称,该名称使用 foo.my_global
的当前值进行初始化。随后的赋值更改了“本地”全局变量的名称,而不是 foo.my_global
。
关于Python 导入和全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59738003/