【发布时间】:2021-12-10 11:48:47
【问题描述】:
首先,我知道像这样使用全局变量是不好的,但不幸的是,我受到了我无法控制的力量的限制。
我有两个文件:
a.py:
x = {}
from b import *
def main():
global x
x[0] = 'hello'
foo()
if __name__ == '__main__':
main()
b.py:
import a as my_a
def foo():
print(my_a.x)
我想执行$python a.py 为我打印出更新的字典,但现在它只提供空字典。
有什么方法可以简单地修改此代码,以便foo() 看到对a.py 的更新更改?我也希望避免频繁重新导入。请注意,实际上b.py 实际上是一个很长的文件,我也无法更改其函数定义以添加更多参数。
【问题讨论】:
-
了解您的
global语句在main函数中没有任何用处,这一点非常重要 -
@juanpa.arrivillaga 注意到。这是从更复杂的代码中剥离出来的,我将其复制过来,在本示例中可以将其删除。
-
a.py用于创建 两个 模块,__main__和a。尽管来自相同的代码,但它们是不同的,因此my_a.x没有引用与__main__.x相同的对象(这是__main__.main()更新的内容。) -
谢谢@chepner,这对理解很有帮助。有什么方法可以从 main 中修改 a 的值吗?我应该将 main 拆分为导入 a.py 的第三个文件吗?
-
我肯定会将
a.py分成两个文件。它可以简单地从a.py中剥离if块,然后将main.py定义为导入a并调用a.main()。
标签: python circular-dependency globals