【发布时间】:2021-11-07 03:55:45
【问题描述】:
所以我读到跨文件共享全局变量的方法是创建一个包含全局变量的模块并将其导入需要访问全局变量的所有 python 文件中。但是它似乎对我来说没有按预期工作(Python 3.6+)
简单的目录结构:
run.py
mypack/
-- globals.py
-- stuff.py
-- __init__.py
我在 globals.py 中有一个全局变量,我需要在主文件 (run.py) 中对其进行修改,最后在退出程序时打印出来。它似乎不起作用:
__init__.py:
from .stuff import *
globals.py:
test = 'FAIL'
stuff.py:
import atexit
from .globals import test
def cya():
print ("EXIT: test = " + test)
atexit.register(cya)
def hi():
print('HI')
运行.py:
import mypack
import mypack.globals as globals
mypack.hi()
globals.test = 'PASS'
print ("MAIN: test = " + globals.test)
脚本执行的输出:
HI
MAIN: test = PASS
EXIT: test = FAIL
显然,退出例程 (cya) 没有显示在 run.py 中修改的全局值的正确值。不知道我做错了什么。
【问题讨论】:
-
附注 - 不要使用
globals作为模块名称/别名。这是built-in functiom -
@buran 谢谢 - 所以我将
globals更改为universal以供我使用。无论如何,它不会改变问题。 -
如果您多次导入 globls,变量会在每次导入时重新初始化。您应该创建单例对象。
-
@PeterTrcka 很棒 - 这就是问题所在
-
@PeterTrcka 绝对不正确