首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > perl python >

python的全局变量怎么在模块之间共享

2012-02-20 
python的全局变量如何在模块之间共享?一个简单的实验:假设现在有两个模块,模块varmain.py负责声明并初始化

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。

热点排行