我刚刚开始使用 Python C 扩展,并且很好奇为什么可从 Python 调用的 C 函数必须采用 2 个 PyObject* 参数并返回一个 PyObject*。我写了以下“Hello World”扩展:
#include <Python.h>
static PyObject *
hello_world(PyObject *self, PyObject *noargs)
{
printf("Hello World\n");
return Py_BuildValue("");
}
// Module functions table.
static PyMethodDef
module_functions[] = {
{ "hello_world", hello_world, METH_NOARGS, "hello world method" },
{ NULL }
};
// This function is called to initialize the module.
PyMODINIT_FUNC
inittesty2(void)
{
Py_InitModule("testy2", module_functions);
}
为什么我不能(尤其是使用 METH_NOARGS)使用以下 hello_world 方法:
static void
hello_world()
{
printf("Hello World\n");
}
?