|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 Stubborn 于 2022-12-27 22:48 编辑
想用C语言给python写一个扩展
简单的例子一:
我在python中,使用我的扩展函数,可以正常,打印得到13;
from my_method import fir_test_add
print(fir_test_add(8, 5))
对应的C原形是
int test_add(int a, int b)
{
return a + b ;
}
static PyObject *
Test_add(PyObject *self, PyObject *args){
int a,b;
if(!PyArg_ParseTuple(args ,"ii", &a, &b)) {
return NULL;
}
return (PyObject*)Py_BuildValue("i", test_add(a, b));
}
问题来了,如果我的python输入是一个列表长度不定,希望返回的也是一个固定长度的列表。from fir_method import fir_test_add
print(fir_test_add([8, 5, 8, 9, 1, 8]))
那么我对应的C接口应该怎么编写?
谢谢,看完了 static PyObject *
Update(PyObject *self, PyObject *args)
{
PyObject *PyList;
PyObject *PyItem;
Py_ssize_t length;
if(!PyArg_ParseTuple(args ,"O!", &PyList_Type, &PyList)) {
PyErr_SetString(PyExc_TypeError, "params must be a List");
return NULL;
}
length = PyList_Size(PyList);
int array[length];
for (int idx = 0; idx < length; ++idx)
{
PyItem = PyList_GetItem(PyList, idx);
array[idx] = PyLong_AsLong(PyItem);
}
int *arr = update_state(array, length);
int val0, val1, val2, val3, val4, val5, val6, val7, val8, val9;
val0 = arr[0];
val1 = arr[1];
val2 = arr[2];
val3 = arr[3];
val4 = arr[4];
val5 = arr[5];
val6 = arr[6];
val7 = arr[7];
val8 = arr[8];
val9 = arr[9];
return (PyObject*)Py_BuildValue("[i,i,i,i,i,i,i,i,i,i]", val0, val1, val2, val3, val4, val5, val6, val7, val8, val9);
}
|
|