我在寫一個C函數,它以ints
的Python tuple
作爲參數。Python數組到C數組
static PyObject* lcs(PyObject* self, PyObject *args) {
int *data;
if (!PyArg_ParseTuple(args, "(iii)", &data)) {
....
}
}
我能轉換爲固定長度(這裏是3),但如何從任意長度的tuple
一個C array
的元組?
import lcs
lcs.lcs((1,2,3,4,5,6)) #<- C should receive it as {1,2,3,4,5,6}
EDIT
相反的元組我可以通過與由分隔的數字串的 ';'。例如'1; 2; 3; 4; 5; 6'並用C代碼將它們分開到數組中。但我不認爲這是一個正確的方法。
static PyObject* lcs(PyObject* self, PyObject *args) {
char *data;
if (!PyArg_ParseTuple(args, "s", &data)) {
....
}
int *idata;
//get ints from data(string) and place them in idata(array of ints)
}
EDIT(液)
我想我已經找到了解決辦法:
static PyObject* lcs(PyObject* self, PyObject *args) {
PyObject *py_tuple;
int len;
int *c_array;
if (!PyArg_ParseTuple(args, "O", &py_tuple)) {
return NULL;
}
len = PyTuple_Size(py_tuple);
c_array= malloc(len*4);
while (len--) {
c_array[len] = (int) PyInt_AsLong(PyTuple_GetItem(py_tuple, len));
//c_array is our array of ints :)
}
va_list?他只有一個論點。 – 2014-08-28 15:30:56
參數是一個元組,所以你可以使用操作元組的函數... https://docs.python.org/2/c-api/tuple.html 像PyTuple_GetItem和PyTuple_Size 這裏有一個例子這應該有所幫助:http://stackoverflow.com/questions/8001923/python-extension-module-with-variable-number-of-arguments – danielfranca 2014-08-28 15:46:09
謝謝,PyTuple_Size和PyTuple_GetItem是非常有用的:) – 2014-08-28 16:12:23