eik*_*ega 6 python python-2.7 python-3.x
当您启动Python解释器时,似乎在启动过程中会自动导入某些模块/包:
python
Python 2.7.6 (default, Jan 13 2014, 14:59:37)
...
>>> import sys
>>> for key in sys.modules.iterkeys():
... print(key)
...
os
sys
abc
others ...
Run Code Online (Sandbox Code Playgroud)
但是,这些模块似乎已加载到不同的范围/命名空间中,因为如果没有其他范围,则无法访问它们import
:
>>> abc
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'abc' is not defined
Run Code Online (Sandbox Code Playgroud)
这是我的问题:
在新的解释器启动时,sys.modules
将包含那些由 Python 自动加载的模块,因为它们执行 Python 解释器运行所需的角色。例如,Py_InitializeEx
在Python/pythonrun.c
包含像这样的行
bimod = _PyBuiltin_Init();
Run Code Online (Sandbox Code Playgroud)
它初始化__builtin__
模块,其中内置函数如int
和open
live,以及
sysmod = _PySys_Init();
Run Code Online (Sandbox Code Playgroud)
它初始化sys
模块。
至于这些模块加载到哪个命名空间中,模块并没有真正加载到命名空间中。该import
语句加载一个模块,并将模块或模块中的项分配给当前命名空间中的一个或多个变量,但模块加载和分配是独立的步骤。诸如“_PySys_Init
不将模块分配到任何特定名称空间”之类的调用。但是,导入机制将记录sys.modules
当前 Python 执行中任何代码加载的任何模块,因此进一步导入不会重新执行该模块并创建新副本。
归档时间: |
|
查看次数: |
64 次 |
最近记录: |