首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网络技术 > 网络基础 >

Python源码之初始化(5)-initmain()

2013-10-02 
Python源码之初始化(五)-initmain()初始化执行到initmain()的时候PyImport_GetModuleDict() 返回的是inter

Python源码之初始化(五)-initmain()


初始化执行到initmain()的时候
PyImport_GetModuleDict() 返回的是interp->modules, 是一个dict
包含了 sys, _codecs, builtins, zipimport等


接着PyModule_New("__main__"), 创建一个__main__ module, 
并在__main__ module的dict里面加入 __name__,  __doc__, __package__ 三个key,这和所有module的创建一样
然后把这个__main__ 模块加入到interp->modules


在退出initmain()之前,系统把 __builtins__模块加入__main__模块的dict中

static voidinitmain(void){    PyObject *m, *d;    m = PyImport_AddModule("__main__");    if (m == NULL)        Py_FatalError("can't create __main__ module");    d = PyModule_GetDict(m);    if (PyDict_GetItemString(d, "__builtins__") == NULL) {        PyObject *bimod = PyImport_ImportModule("builtins");        if (bimod == NULL ||            PyDict_SetItemString(d, "__builtins__", bimod) != 0)            Py_FatalError("can't add __builtins__ to __main__");        Py_DECREF(bimod);    }}


热点排行