У меня есть функция C, которая возвращает массив строк.Как я могу вызвать его в форме расширения Python C, которое вернет массив обратно в вызывающую функцию Python?(Я новичок в расширениях Python C и имею минимальный опыт работы с расширениями)
Это определение, которое я пробовал:
static PyObject* _get_array(PyObject* self, PyObject* args)
{
int64_t value;
int init_level;
int final_level;
if(!PyArg_ParseTuple(args, "Lii", &value, &init_level, &final_level))
return NULL;
// returning the array as a Python object by o
return Py_BuildValue("o", _get_array(value, init_level, final_level));
}
и метод def:
static PyMethodDef array_methods[] = {
{ "get_array", _get_array, METH_VARARGS, "Returns a string array"},
{ NULL, NULL, 0, NULL }
};
Обновление
Функция get_array:
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include <Python.h>
char **get_array(int64_t value, int init_level, int final_level) {
int SHIFTS []= {44, 40, 36, 32, 28, 24, 20, 16, 12, 8, 4, 0};
long count = 1 << (4* (final_level - init_level));
char** t_array;
t_array = malloc(sizeof(char*)*count);
int shift_coff = 11 -(final_level-init_level);
int64_t base = (value << SHIFTS[shift_coff]);
for (long i=0; i < count; i++){
t_array[i] = malloc((4+final_level)*sizeof(char));
sprintf(t_array[i], "%llX", (base + i));
}
return t_array;
}