我试图使用Python C API在C中调用一个Python函数。我使用PyObject_Call调用Python函数,该函数返回一个PyObject。如果返回的PyObject是numpy数组或列表,那么我应该如何处理它?基本上,如果我想把它转换成一个C数组,或者只是把指针取出来,我应该怎么做?
这是代码的大纲。funcnumpy.power

double Array[4] = {1.0, 2.0, 3.0, 4.0};
int Integer = 2;

double *call_func(PyObject *func, double array[], int integer){
    PyObject *args;
    PyObject *kwargs;
    PyObject *result;
    npy_intp dims[1] = {4};
    double *retval;

    PyGILState_STATE state = PyGILState_Ensure();

    args = Py_BuildValue("(Od)", PyArray_SimpleNewFromData(1, dims, NPY_DOUBLE, Array), integer);
    kwargs = NULL;

    result = PyObject_Call(func, args, kwargs);
    Py_DECREF(args);
    Py_XDECREF(kwargs);

    retval = ???
    Py_DECREF(result);

    PyGILState_Release(state);
    return retval;
}

...

最佳答案

如果对象是Numpy数组,那么我认为this将帮助您。但你应该注意它的功能:

void* PyArray_GetPtr(PyArrayObject* aobj, npy_intp* ind)

它将帮助您操作numpy数组。
如果是列表,则需要this link中的函数来操作对象。
您将设法获取指向该项的指针并将其转换回C对象。

关于c - 如何在Python C API中获取返回的PyObject的指针?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38059466/

10-11 22:05