我正在努力理解模块中全局变量的以下行为。我想从另一个模块导入一个变量,并通过函数调用更改它的值(这是因为在我的用例中该函数必须访问模块的其他'私有'部分)。我知道如何避免使用全局变量,我做到了,但我仍然很好奇。
这是the preferred method之后的python文档。所有全局变量都放在外部config.py
中,必须在任何地方导入。
#config.py
s = 'initialized'
#module.py
import config
def chg():
config.s = 'changed'
prt()
def prt():
print(config.s)
#main.py
import config
import module
print(config.s)
module.chg()
print(config.s)
这很好用(我在这里也读了一些关于这个方法的线程):我们不仅可以从其他文件访问s
,而且可以从任何地方更改它的值,而且这种变化是“持久的”。
guest@desktop /tmp $ python3 main.py
initialized
changed
changed
我不清楚是否需要它或者强烈建议将所有全局内容分成另一个文件。
#module.py
s = 'initialized'
def chg():
global s
s = 'changed'
prt()
def prt():
print(s)
#main.py
import module
print(module.s)
module.chg()
print(module.s)
显然,这不是强制性的。所以这不是魔术; - )
guest@desktop /tmp $ python3 main.py
initialized
changed
changed
这是我迷失的地方。我采用与第二个相同的基础,但是我改变了导入全局变量的方式。
#main.py
from module import s, chg
print(s)
chg()
print(s)
这不再起作用了(我的意思是,正如我所料......)。
guest@desktop /tmp $ python3 main.py
initialized
changed
initialized
那么,我在这里错过了什么?我读到的大多数线程都在处理导入全局变量但不更改其值。显示了两种方法。谢谢!