python的全局变量如何在模块之间共享?
一个简单的实验:
假设现在有两个模块,模块varmain.py负责声明并初始化全局变量,同时作为main的入口调用其他辅助模块完成程序功能;模块varprinter负责打印全局变量,你可以想像该模块是需要访问全局变量并使用它们完成某些具体的业务工作。
代码如下:
[code]
#!/usr/bin/env python
#module varmain.py
import varprinter
name = ' '
def loadName():
global name
name = 'Hello! '
if __name__ == '__main__ ':
loadName()
print 'in main name = ', name
varprinter.printName()
[/code]
[code]
#!/usr/bin/env python
#module varprinter.py
from varmain import name
def printName():
print 'in varprinter name = ', name
[/code]
运行后的结果为:
[code]
in main name = Hello!
in varprinter name =
[/code]
即全局变量name并没有保持。
一些简单的修改如在varprinter.py中把import改成from import,在varmain.py中撤掉loadName()函数,而将name变量的修改直接放到if __name__ == '__main__ ':下等招数都试过了,效果一样。
各位请调试成功后回帖,另外也不要修改程序的整体结构,在前面已经说清楚了,varmain模块是负责管理全局变量的,可以想像是从数据库或者文件等持久层读入全局变量;varprinter是访问和使用全局变量来完成业务功能的。不知各位高手是否有可行性的建议?谢谢!
[解决办法]
把文件varprinter.py中的
print 'in varprinter name = ', name
换成
import sys
print 'in varprinter name = ', sys.modules[ '__main__ '].name
也不需要from varmain import name这行了
[解决办法]
varmain.py实际上是两个模块,一个是__main__,一个是varmain,也就是说,这个文件会被载入两次。
你设置的是__main__中的hello,不是varmain中的hello。