Python C Api 将一个PyObject * 转入c数组

Python C Api transfer a PyObject * into c array

我使用了 python c api 并希望从 python 得到一个数组。我 return 从 python 端编辑了一个 python 数组,并想将 PyObject* 结果传输到一个 c 数组中,以便我可以使用它。

有什么方法可以做到吗?

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

return arr[3]

会导致 PyObject_callobject return NULL?

return arr

确实给了我一些东西

在 Python 中,"array" 是 list 数据类型。查看 C API 中的 PyList_* 函数。你可以找到这个参考 here for 2.7 and here for 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) 维护这些对象的引用计数。