我是靠谱客的博主 拼搏纸飞机,这篇文章主要介绍python 全局变量多个模块访问,现在分享给大家,希望可以做个参考。

昨天遇到一个诡异的问题

多个.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内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(44)

评论列表共有 0 条评论

立即
投稿
返回
顶部