Вот одно решение, которое я нашел, но оно может быть не самым лучшим:
%typemap(in) double[ANY] (double temp[$1_dim0]) {
int i;
if (!PySequence_Check($input)) {
PyErr_SetString(PyExc_ValueError,"Expected a sequence");
return NULL;
}
if (PySequence_Length($input) != $1_dim0) {
PyErr_SetString(PyExc_ValueError,"Size mismatch. Expected $1_dim0 elements");
return NULL;
}
for (i = 0; i < $1_dim0; i++) {
PyObject *o = PySequence_GetItem($input,i);
if (PyNumber_Check(o)) {
temp[i] = (double) PyFloat_AsDouble(o);
} else {
PyErr_SetString(PyExc_ValueError,"Sequence elements must be numbers");
return NULL;
}
}
$1 = temp;
}
Это пример документов, с которыми я наконец столкнулся, которые преобразуют списки Python в массивы.Следующая часть была сложнее, соединяя воедино несколько примеров, которые я мог бы преобразовать возвращаемый массив в список Python:
%typemap(argout) double PointB[3]{
PyObject *o = PyList_New(3);
int i;
for(i=0; i<3; i++)
{
PyList_SetItem(o, i, PyFloat_FromDouble($1[i]));
}
$result = o;
}
Однако мне нужно создать один из них для каждого возвращаемого значения в API.Также я должен назвать его с фиктивным значением в качестве параметра:
point_b = convertAtoB(s, point_a, dummy)
Есть ли лучший способ?