我使用了 python c api 并希望从 python 中获取一个数组。我从 python 端返回了一个 python 数组,并想将 PyObject* 结果传输到一个 c 数组中,以便我可以使用它。
无论如何我可以做到这一点吗?
附带问题:在什么情况下尝试返回数组中的元素
return arr[3]
会导致 PyObject_callobject 返回 NULL 吗?
return arr
确实给了我一些东西
最佳答案
在 Python 中,“数组”是一种 list
数据类型。查看 C API 中的 PyList_*
函数。你可以找到这个引用 here for 2.7和 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)
维护这些对象的引用计数是必要的。
关于Python C Api 将 PyObject * 传输到 c 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35141827/