如果我理解正确,
PyModule_Create
取代两者都返回PyObject*
但是,在Python 3.X中,模块的初始化函数 必须 将PyObject*
返回给模块 - 即
PyMODINIT_FUNC
PyInit_spam(void)
{
return PyModule_Create(&spammodule);
}
而在Python2.X中,这不是必要的 - 即
PyMODINIT_FUNC
initspam(void)
{
(void) Py_InitModule("spam", SpamMethods);
}
所以,我的理智检查问题是:
现在,我只是在尝试非常简单的Python C扩展案例。也许如果我做得更多,那么答案就很明显,或者可能是因为我试图将Python嵌入其他东西......
答案 0 :(得分:5)
是的,您的理解是正确的。必须使用返回类型PyMODINIT_FUNC从initing函数返回新模块对象。 (PyMODINIT_FUNC声明函数在python2中返回void,并在python3中返回PyObject *。)
我只能推测做出改变的人的动机,但我相信这样可以更容易地识别导入模块的错误(你可以从module-init函数返回NULL)在python3中,如果出现问题)。