假设我有一个文件:
# 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
。