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

[D]哪位高手能解释下 在a.py 中导入b ,在b.py中导入a ?

2012-03-22 
[D]谁能解释下 在a.py 中导入b ,在b.py中导入a ???假设有两个文件一个为a.py ;一个为b.py文件a.py内容为im

[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对象只有一个。”

具体到你的例子:

Python code
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'完成 

热点排行