我使用的似乎是 PyArg_ParseTuple 的确切用法,但代码仍然无法工作。我正在使用 python 2.7
这是我正在编写的 Python 扩展的 C 代码:
static PyObject* tpp(PyObject* self, PyObject* args)
{
PyObject* obj;
PyObject* seq;
int i, len;
PyObject* item;
int arrayValue, temp;
if (!PyArg_ParseTuple(args, "O", &obj)){
printf("Item is not a list\n");
return NULL;
}
seq = PySequence_Fast(obj, "expected a sequence");
len = PySequence_Size(obj);
arrayValue = -5;
printf("[\n");
for (i = 0; i < len; i++) {
item = PySequence_Fast_GET_ITEM(seq, i);
// printf("%d : %d, PyArg: ", item, *item);
// PyArg_ParseTuple(item, "I", &temp);
PyObject* objectsRepresentation = PyObject_Repr(item);
const char* s = PyString_AsString(objectsRepresentation);
printf("%s\n", s);
PyObject* objType = PyObject_Type(item);
PyObject* objTypeString = PyObject_Repr(objType);
const char* sType = PyString_AsString(objTypeString);
printf("%s\n", sType);
if (PyArg_ParseTuple(item, "i", &arrayValue) != 0){
printf("%d\n", arrayValue);
printf("horray!\n");
}
}
Py_DECREF(seq);
printf("]\n");
printf("Item is a list!\n");
Py_RETURN_NONE;
}
然后我只是构建扩展并转到终端 import et 然后 et.tpp([1,2]) 无法打印该行 if (PyArg_ParseTuple(item, "i", &arrayValue) != 0){ printf(" %d\n", 数组值); printf("万岁!\n"); }
正如您在代码中看到的那样,我检查了列表中元素的类型,并打印了“int”。然而由于某种原因 PyArg_ParseTuple 有错误。
我需要能够从 python 中的列表中访问信息以复制一些数据,将其传递给其他地方的 C 代码,然后将结果返回给 python。
非常感谢!