1

私はPython用のC拡張機能を書いています。

を使用してPythonリストにCオブジェクトを追加する方法を知りたいですPyList_SetItem。例えば、

Cオブジェクトがあります。

Atom *a = (Atom *)(PyTuple_GET_ITEM(tmp2, 0));

私はリストを作りました:

PyObject* MyList = PyList_New(3);

次のステートメントの3番目の引数が何であるかわかりません。

PyObject_SetItem(MyList, 0, a);

また、このCオブジェクトのリストをPythonに返すにはどうすればよいですか。

4

1 に答える 1

4

の3番目の引数PyList_SetItemは、リストに追加されるPythonオブジェクトです。これは、次の簡単な例のように、通常はCタイプから変換されます。

/* This adds one to each item in a list.  For example:
        alist = [1,2,3,4,5]
        RefArgs.MyFunc(alist)
*/
static PyObject * MyFunc(PyObject *self, PyObject *args)
{
   PyObject * ArgList;
   int i;

   PyArg_ParseTuple(args, "O!", &PyList_Type, &ArgList));

   for (i = 0; i < PyList_Size(ArgList); i++)
   {
      PyObject * PyValue;
      long iValue;

      PyValue = PyList_GetItem(ArgList, i);

      /* Add 1 to each item in the list (trivial, I know) */
      iValue = PyLong_AsLong(PyValue) + 1;

      /* SETTING THE ITEM */
      iRetn = PyList_SetItem(ArgList, i, PyLong_FromLong(iValue));

      if (iRetn == -1) Py_RETURN_FALSE;
   }

   Py_RETURN_TRUE;
}

PyObject_SetItem似ている。違いはPyList_SetItem、参照を盗むが、それをPyObject_SetItem借用するだけであるということです。 PyObject_SetItemタプルなどの不変オブジェクトでは使用できません。

于 2013-03-11T15:26:52.893 に答える