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 void
initmain(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);
    }
}


發佈了94 篇原創文章 · 獲贊 20 · 訪問量 21萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章