我在python中使用的c中有一个二维矩阵类。我希望能够通过传递切片对象的元组来调用矩阵类,例如A [1:2,1:2]。到目前为止,我有以下内容。 __getitem__
方法的相关C代码看起来像
int __getitem__(PyObject *slices){ // get tuple of slice objects
PyObject* slice1; // declare first slice object
PyObject* slice2; // declare second slice object
slice1 = PyTuple_GetItem(slices, 0); // get first slice from tuple
slice2 = PyTuple_GetItem(slices, 1); // get second slice from tuple
// get start and stop of first slice (currently the following three lines do not work)
Py_ssize_t start, stop, step, length;
PySlice_GetIndicesEx(slice1,length,&start,&stop,&step);
return PySlice_Check(slice2) ;
}
此代码使用PySlice_Check
方法检查slice2是否确实是切片对象。如果我注释掉PySlice_GetIndicesEx(slice1,length,&start,&stop,&step)
,则会得到预期的1
。但是,如果我将此行留在里面,则会出现错误:
cannot convert 'PyObject* {aka _object*}' to 'PySliceObject*' for argument '1' to 'int PySlice_GetIndicesEx(...
这意味着我无法将slice1或slice2传递到PySlice_GetIndicesEx
,因为它需要PySliceObject
对象。
如何正确解开切片对象,以便可以将其传递到PySlice_GetIndicesEx.
中,即使PySliceObject
和PyObject
,此函数也接受PySlice_Check(slice1)
,而不是PySlice_Check(slice2)
,这就是slice1和slice2的含义。都返回1。
我在python中使用的c中有一个二维矩阵类。我希望能够通过传递切片对象的元组来调用矩阵类,例如A [1:2,1:2]。到目前为止,我有以下内容。 ...