在C扩展中从Python获取列表

时间:2018-10-03 15:29:16

标签: python python-c-api

我正在尝试获取列表作为Python C扩展中的参数,函数和包装器(省略了函数的表):

#include <Python.h>

int MyFunction(int a_triplet[]){

    printf("%i\n", a_triplet[0]);

    return 0;    
}

static PyObject* any_function(PyObject* self, PyObject* args)
{

    PyObject *lst;

    if (!PyArg_ParseTuple(args, "O", &lst))
        return NULL;

    return Py_BuildValue("[i]", MyFunction(lst)); // Returns error
}

我在最后一行有些迷路:

return Py_BuildValue("[i]", MyFunction(lst));

在Python函数中,我有这个:

print (Module.any_function([67, 93, 56]))

如何将列表通过Python传递给C扩展?我迷路了,因为如果我编写一个函数和一个包装器来接收整数,那么效果很好:

#include <Python.h>

int MyFunction(int n){

    printf("%i", n);

    return 0;    
}

static PyObject* alice_bob(PyObject* self, PyObject* args)
{

    int n;

    if (!PyArg_ParseTuple(args, "i", &n))
        return NULL;

    return Py_BuildValue("i", MyFunction(n));
}

1 个答案:

答案 0 :(得分:0)

  • Numpy API具有一个PyArray_Mean函数,可以完成您要执行的操作:

    static PyObject *func1(PyObject *self, PyObject *args) {
        PyArrayObject *X, *meanX;
        int axis;
        PyArg_ParseTuple(args, "O!i", &PyArray_Type, &X, &axis);
        meanX = (PyArrayObject *) PyArray_Mean(X, axis, NPY_DOUBLE, NULL);
        return PyArray_Return(meanX);
    }