Оказалось, что это было меньше боли, чем я думал, когда я нашел документы, которые мне, вероятно, следовало прочитать, прежде чем я задал вопрос. Я смог получить объект PyList в своей функции-обертке, а затем просто перебрать его и поместить значения в нужный мне вектор. Код выглядит так:
static PyObject* py_set_perlin_parameters(PyObject* self, PyObject* args)
{
int octaves;
double persistence;
PyObject* zoom_list;
int zoom_count = 0;
std::vector<double> zoom_vector;
if(!PyArg_ParseTuple(args, "idO!:set_perlin_parameters", &octaves, &persistence, &PyList_Type, &zoom_list))
{
return NULL;
}
if(!PyList_Check(zoom_list))
{
PyErr_SetString(PyExc_TypeError, "set_perlin_parameters: third parameter must be a list");
return NULL;
}
zoom_count = PyList_Size(zoom_list);
for(int i = 0; i < zoom_count; i++)
{
PyObject* list_val;
double val;
list_val = PyList_GetItem(zoom_list, i);
if(list_val == NULL)
{
return NULL;
}
val = PyFloat_AsDouble(list_val);
zoom_vector.push_back(val);
}
set_perlin_parameters(octaves, persistence, zoom_vector);
return Py_None;
}