在我的模块中,有一个方法将python列表除以double并将其除以]]
static PyObject *st_div_r(PyObject *self, PyObject *args){ PyObject *pList; Py_ssize_t n; double x; int i; if (!PyArg_ParseTuple(args, "O!d", &PyList_Type, &pList, &x)) { PyErr_SetString(PyExc_TypeError, "parameters are wrong."); return NULL; } n = PyList_Size(pList); for(i=0;i<n;i++) { PyList_SetItem(pList,i,Py_BuildValue("d",PyFloat_AsDouble(PyList_GetItem(pList,i))/x)); }; Py_INCREF(pList); return pList; }
它是这样的
my_mod.st_div_r([1,2,3],0.5)
[2,4,6]
我想在模块的另一个方法中使用st_div_r,该方法获取列表列表,将其第一个元素除以double并返回它
static PyObject *det(PyObject *self, PyObject *args){ PyObject *pList; double d = 2.0; if (!PyArg_ParseTuple(args, "O!", &PyList_Type, &pList)) { PyErr_SetString(PyExc_TypeError, "parameters are wrong."); return NULL; } PyList_SetItem(pList,0,st_div_r(pList,(PyList_GetItem(pList,0),Py_BuildValue("d",d)))); Py_INCREF(pList); return pList; }
它应该像这样工作
my_mod.det([[1,2],[3,4]])
[[0.5,1],[3,4]]
但是这不起作用
TypeError: parameters are wrong
所以,问题是如何在det内调用st_div_r以及如何作为self传递。将不胜感激。谢谢
在我的模块中,有一个方法将python列表除以双静态PyObject * st_div_r(PyObject * self,PyObject * args){PyObject * pList; Py_ssize_t n;双x;我...
您必须创建一个PyTuple作为您自己的函数(st_div_r)的第二个参数!