gpt4 book ai didi

python - 将 C 对象添加到 Python List 并将 C 对象列表返回给 python

转载 作者:太空宇宙 更新时间:2023-11-04 01:29:07 25 4
gpt4 key购买 nike

我正在为 python 编写 C 扩展。

我想知道如何使用 PyList_SetItem 将 C 对象添加到 python 列表。例如,

我有一个 C 对象。

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

我列了一个 list :

PyObject* MyList = PyList_New(3);

我不确定下面语句中的第三个参数必须是什么。

PyObject_SetItem(MyList, 0, a);

还有如何将这个 C 对象列表返回给 python。

最佳答案

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 不能与不可变对象(immutable对象)一起使用,例如元组。

关于python - 将 C 对象添加到 Python List 并将 C 对象列表返回给 python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15341344/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com