python多模块共享同一变量

Python import 包的机制是import进来的系统的module都放在sys.module这个字典里面

多个py文件在import的时候,会先去sys.module里面检查是否已经import了,如果已经import了,就不再重复import,否则就import进来

from aaa.yyy import x则不一样,test.py中这样from import,此时x就是test自己命名空间中的变量。所以x只在test.py中有效,无论如何对x修改,都无法影响yyy中的x

也就是说
from yyy import x
等同于

improt yyy
x= yyy.x  # 当你执行x=2时,完全影响不到yyy.x

所以,如果需要共享变量,就不要使用from yyy import x这种形式,而是使用import file,然后就可以通过yyy.x来使用,然后yyy.x='abc'可以进行修改。这样处理全局性的变量就可以共享的。也就是保持一个独立的namespace,这样python不会再次导入,从而实现共享。

示例:

# 目录树
multi_module
│  main.py
│  val_sync.py
# val_sync.py
DICT = {
	'a':1,
	'b':2,
}
# main.py
import val_sync as mv
print(mv.DICT)
mv.DICT['c'] = 3
print(mv.DICT)
mv.DICT.pop('a')
print(mv.DICT)
python main.py
out:
{'a': 1, 'b': 2}
{'a': 1, 'b': 2, 'c': 3}
{'b': 2, 'c': 3}
posted @ 2019-06-03 10:15  开心大人  阅读(5339)  评论(0编辑  收藏  举报