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)
维护这些对象的引用计数。
我使用了 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)
维护这些对象的引用计数。