Python 导入和全局变量



假设我有一个文件:

# 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_globalNone,如果不是其他默认值的话。

另请注意,上述解决方案

from foo import my_global
my_global = "..."

这会在当前模块中创建一个新的全局名称,该名称使用foo.my_global的当前值进行初始化。随后的赋值更改了"局部"全局变量的名称,而不是foo.my_global

相关内容

  • 没有找到相关文章

最新更新