先看代码
C++
pArg = PyTuple_New(6);
PyTuple_SetItem(pArg,0,Py_BuildValue("i",NUM_OF_SPECTRUM));
PyTuple_SetItem(pArg,1,Py_BuildValue("i",TURB_INDEX));
PyTuple_SetItem(pArg,2,Py_BuildValue("i",CN_START_IDX));
PyTuple_SetItem(pArg,3,Py_BuildValue("i",CN_END_IDX));
pSpec = PyTuple_New(spec.size());
qDebug()<
for(VECF::iterator iter = spec.begin();iter != spec.end();iter ++)
{
pAbsorb = Py_BuildValue("f",*iter);
PyTuple_SetItem(pSpec,static_cast(iter-spec.begin()),pAbsorb);
Py_XDECREF(pAbsorb);
}
PyTuple_SetItem(pArg,4,pSpec);
PyTuple_SetItem(pArg,5,Py_BuildValue("s",MODEL_PARAM_FILE));
pObject = PyEval_CallObject(pClass,pArg);
Python
class model_TCN(object):
def __init__(self,spectrum_pixel,turbidity_index,start_position,end_position,spectrum,model_param_name):
self.TURB_INDEX = turbidity_index
self.SPEC_PIXEL = spectrum_pixel
self.START_POSI = start_position
self.END_POSI = end_position
f_model_param = open(model_param_name,'r')
self.model_param = pk.load(f_model_param)
其他参数都能传递成功,唯独第五个参数,一个Tuple传递异常,python对象获得了这个tuple,但tuple中的值与C++中传递过来不一致