|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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);
- }
复制代码
|
|