Python C API 将 PyObject * 传输到 c 数组中

Python C Api transfer a PyObject * into c array

本文关键字:数组 传输 API PyObject Python      更新时间:2023-10-16

我使用了python c api,并希望从python中获取一个数组。我从 python 端返回了一个 python 数组,并希望将 PyObject* 结果传输到 c 数组中,以便我可以使用它。

无论如何我能做到吗?

附带问题:在什么情况下尝试返回数组中的元素,例如

return arr[3]

会导致PyObject_callobject返回 NULL?

return arr

确实给了我一些东西

在Python中,"数组"是一种list数据类型。 查看 C API 中的PyList_*函数。 您可以在此处找到 2.7 和此处 3.5 的参考。 感兴趣的功能是:

Py_ssize_t PyList_Size(PyObject *list)获取列表成员数 和 PyObject* PyList_GetItem(PyObject *list, Py_ssize_t index)获取对该索引处成员的引用。

简单地使用 malloc 或类似的分配器和for循环应该可以解决问题。

另请注意,仅涉及借用的引用,因此无需通过void Py_INCREF(PyObject *o)void Py_DECREF(PyObject *o)维护这些对象的引用计数。