[D]谁能解释下 在a.py 中导入b ,在b.py中导入a ???
假设有两个文件
一个为a.py ;一个为b.py
文件a.py内容为
import b
......
文件b.py内容为
import a
.......
python解析器是怎么工作的啊????
-------------------------
Double行动:
原帖分数:40
加分:40
[解决办法]
这个解释的不错:
“Python中所有加载到内存的模块都放在sys.modules。当import一个模块时首先会在这个列表中查找是否已经加载了此模块,如果加载了则只是将模块的名字加入到正在调用import的模块的Local名字空间中。如果没有加载则从sys.path目录中按照模块名称查找模块文件,模块文件可以是py、pyc、pyd,找到后将模块载入内存,并加入到sys.modules中,并将名称导入到当前的Local名字空间。
可以看出了,一个模块不会重复载入 。多个不同的模块都可以用import引入同一个模块到自己的Local名字空间,其实背后的PyModuleObject对象只有一个。”
具体到你的例子:
1. 执行'import a' 2. 在sys.modules中插入一个对应于'a'的模块 3. 试图加载a.py的内容到a对应的模块 3.1 执行 'import b' 3.2 在sys.modules中插入一个对应于'b'的模块 3.3 试图加载b.py的内容到b对应的模块 3.3.1 执行(b.py中的)'import a' 3.3.2 在sys.modules中找到对应'a'的模块 3.3.3 b.py中的'import a'完成 3.3.4 加载b.py中其它的内容 3.4 b.py加载完成 3.5 执行a.py的其它内容 4 'import a'完成