昨天遇到一个诡异的问题
多个.py文件去操作访问一个全局变量的时候,有个py文件访问到的是空值,昨天折腾了一晚上没搞定,上午突然想到是否是调用了2次定义全局变量module导致
所以调试了下,发现:
1. 定义该全局变量的module确实被import了2次,而且是当做不同的sys.module的key
2. 于是第二次 import的时候当做另外一个全局变量了
这个问题的原因是:
1. python import 包的机制是,import进来的和默认的系统的module了,都放在sys.module这个字典里面
2. 多个py文件再次import的时候,会先去sys.module里面检查是否已经import了,如果已经import了,就不再重复import,否则就import进来
3. 问题的关键是,如果a.py 定义如下:
import abc
如果直接从a目录执行,sys.module里面有个key叫abc
b.py 定义如下import abc
如果 b.py被调用的地方是采用包结构,比如.
from ./../**/ import b
这个时候, sys.module里面的key则是 ../../**/b
这样,就重新加载了
解决该问题的办法是,尽量都用包结构去import,这样能保证import只有一次
最后
以上就是拼搏纸飞机最近收集整理的关于python 全局变量多个模块访问的全部内容,更多相关python内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复