最近在编写有关Python C API相关的程序。
需要从C++中向python传递一个自定义的矩阵,类似二维数组,存储了一些点的xyz坐标信息。
C++的其中部分代码如下
pPointList = PyList_New(mNbOfVertex);
//先处理点
for (int i=0; i<mNbOfVertex; i++)
{
pList = PyList_New(3);
PyList_SET_ITEM(pList,0,PyFloat_FromDouble(oVertexMat->getMatrixCell(i,0)));
PyList_SET_ITEM(pList,1,PyFloat_FromDouble(oVertexMat->getMatrixCell(i,1)));
PyList_SET_ITEM(pList,2,PyFloat_FromDouble(oVertexMat->getMatrixCell(i,2)));
PyList_Append(pPointList,pList);
Py_DECREF(pList);
}
pArgs = PyTuple_New(1);
PyTuple_SetItem(pArgs,0,Py_BuildValue("O",pPointList));
if (pArgs == NULL)
{
AfxMessageBox(_T("参数传递失败"));
return E_FAIL;
}
pReturn =PyEval_CallObject(pFunc,pArgs);
if (pReturn==NULL)
{
cout<<"程序未正确返回值"<<endl;
}
float nResult=0;
cout<<"nResult is "<<nResult<<endl;
PyArg_Parse(pReturn,"f",&nResult);
cout <<"return is " <<nResult<<endl;
在python中进行一些读写的测试,python程序如下
def build_index(iVertexList):
a = iVertexList[-25][1]
return a
测试时发现,iVertexList的第一个下标使用负下标时,程序能正常返回值,但是如果第一个下标使用正值时,就会报错。请问什么原因?