Получить список из Python в расширении C - PullRequest
0 голосов
/ 03 октября 2018

Я пытаюсь получить список в качестве аргумента в расширении C в Python, функции и обертке (таблица функции опущена):

#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 голосов
/ 03 октября 2018
  • В 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);
    }
    
...