【发布时间】:2014-04-22 08:30:34
【问题描述】:
我在 python 中使用了一个 c 中的 2d 矩阵类。我希望能够通过传递切片对象的元组来调用矩阵类,例如 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,即slice1 和slice2,即使PySlice_Check(slice1) 和@987654333 @ 都返回 1。
【问题讨论】:
标签: python c python-c-api