PyArg_ParseTupleの正確なusgaeと思われるものを使用していますが、コードはまだ機能していません。私はPython2.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 "、arrayValue); printf( "horray!\ n"); }
コードでわかるように、リスト内の要素のタイプを確認すると、「int」が出力されます。しかし、何らかの理由でPyArg_ParseTupleにエラーが発生しています。
Pythonのリストから情報にアクセスしてデータをコピーし、それを他の場所のCコードに渡して、結果をPythonに返すことができる必要があります。
どうもありがとう!