在C扩展中从Python获取列表

在C扩展中从Python获取列表,python,python-c-api,Python,Python C Api,我试图在Python的C扩展中获取一个列表作为参数,函数和包装器(函数的表被省略): 在Python函数中,我有以下内容: print (Module.any_function([67, 93, 56])) 如何将Python中的列表传递给C扩展?我迷路了,因为如果我编写一个函数和一个包装器来接收一个整数,那么它可以完美地工作: #include <Python.h> int MyFunction(int n){ printf("%i", n); return

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

在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));
}
#包括
int MyFunction(int n){
printf(“%i”,n);
返回0;
}
静态PyObject*alice_bob(PyObject*self,PyObject*args)
{
int n;
if(!PyArg_ParseTuple(args,i,&n))
返回NULL;
返回Py_BuildValue(“i”,MyFunction(n));
}
  • 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); } 静态PyObject*func1(PyObject*self,PyObject*args){ PyArrayObject*X,*meanX; int轴; PyArg_语法元组(args,“O!i”、&PyArray_类型、&X、&axis); meanX=(PyArrayObject*)PyArray_平均值(X,轴,NPY_双精度,空); 返回PyArray_返回(meanX); }

你是说Python“列表”吗?元组?您的语法似乎表明了这一点。还有一些其他类型实际上是数组(numpy类型、Python中的“array”模块等)。请说得准确点。嗨,麦克斯,我有一份清单。我编辑了我的问题你的确切问题是什么?如何使用PyBuildValue构建列表?如何将列表传递给函数?如何将PyList转换为C数组?@ivan_pozdeev我的问题很明确:“如何将Python中的列表传递给C扩展?”实际上,我解释了为什么我会感到困惑,因为使用整数可以很好地工作。如果你考虑下注,那就行了。但其他读者已经理解了这一点question@dfrojas那么您已经有了:您的
lst
PyList
,我看不出有什么问题。如果你真正的问题是“我应该如何利用我所拥有的”,那么你应该问这个问题,并具体说明你到底想做什么。
#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));
}
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); }