如果加载模块,按部分加载 Python 代码的正确程度取决于全局变量



我在Python脚本的开头有几个全局变量,并且有几个类在某些方法中使用这些变量。我想将类保存在单独的文件中并在主脚本中加载它们,但这并没有像我预期的那样工作(因为它在 PHP 中有效)。

问题示例:

main.py (我运行执行的那个)

global_var = 'my global var value'
from myimport import *
print_global()

输出:

I am loaded!
Traceback (most recent call last):
File "import.py", line 3, in <module>
    print_global()
File "myimport.py", line 3, in print_global
    print(global_var)
NameError: global name 'global_var' is not defined

myimport.py

print('I am loaded!')
def print_global():
    print(global_var)

如果我编写指令将所有代码 (*) 导入当前命名空间,为什么函数在单独的模块命名空间中启动,其中global_var被低估,而不是在导入到的名称空间中?

正如我所描述的,进行代码分离的好方法是什么?

我会推荐一种不同的方法,但这会起作用:

global_var = 'my global var value'
from myImport import *
__builtins__.global_var = global_var

全局变量只能在创建它们的模块中访问。你可以让你的函数接受参数并在导入后传递它们。

Python 在本地、封闭、全局和最后内置中查找,因此通过添加 __builtins__.global_var = global_var变量可用于每个模块。

最新更新