我正在尝试在 C 中做一个简单的扩展,它应该能够扩展 python 代码。我在https://github.com/munirhossain/py_c_extension上找到了该代码
#include <Python.h>
// Function 1: A simple 'hello world' function
static PyObject* helloworld(PyObject* self, PyObject* args)
{
printf("Hello Munir\n");
Py_RETURN_NONE;
return Py_None;
}
// Function 2: A C fibonacci implementation
// this is nothing special and looks exactly
// like a normal C version of fibonacci would look
int Cfib(int n)
{
if (n < 2)
return n;
else
return Cfib(n-1)+Cfib(n-2);
}
// Our Python binding to our C function
// This will take one and only one non-keyword argument
static PyObject* fib(PyObject* self, PyObject* args)
{
// instantiate our `n` value
int n;
// if our `n` value
if(!PyArg_ParseTuple(args, "i", &n))
return NULL;
// return our computed fib number
return Py_BuildValue("i", Cfib(n));
}
// Our Module's Function Definition struct
// We require this `NULL` to signal the end of our method
// definition
static PyMethodDef myMethods[] = {
{ "helloworld", helloworld, METH_NOARGS, "Prints Hello Munir" },
{ "fib", fib, METH_VARARGS, "Computes Fibonacci" },
{ NULL, NULL, 0, NULL }
};
// Our Module Definition struct
static struct PyModuleDef myModule = {
PyModuleDef_HEAD_INIT,
"myModule",
"Test Module",
-1,
myMethods
};
// Initializes our module using our above struct
PyMODINIT_FUNC PyInit_myModule(void)
{
return PyModule_Create(&myModule);
}
我想修改该代码,就像我调用 helloworld func 时一样,就像helloworld("max")
它在 C 中返回一样Hello max
,但是我该如何使用PyObject* args
:/ 有什么想法可以做到这一点(在 C 中)?