Python C Api将PyObject*传输到C数组中

Python C Api将PyObject*传输到C数组中,python,c++,arrays,python-c-api,Python,C++,Arrays,Python C Api,我使用了pythoncapi,希望从python获得一个数组。我从python端返回了一个python数组,并希望将PyObject*结果传输到一个c数组中,以便使用它 还有什么我能做到的吗 附带问题:在什么情况下尝试返回数组中的元素 return arr[3] 是否会导致PyObject\u callobject返回NULL return arr 在Python中,“数组”是一个列表数据类型。查看C API中的PyList.*函数。您可以找到此参考和。有关职能包括: Py\u ssize\

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

还有什么我能做到的吗

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

return arr[3]
是否会导致PyObject\u callobject返回NULL

return arr
在Python中,“数组”是一个
列表
数据类型。查看C API中的
PyList.*
函数。您可以找到此参考和。有关职能包括:

Py\u ssize\u t PyList\u Size(PyObject*list)
获取列表成员的数量 和
PyObject*PyList\u GetItem(PyObject*list,Py\u ssize\t index)
获取对该索引处成员的引用

只需简单地使用
malloc
或类似的分配器和
for
循环就可以了


还请注意,只涉及借用的引用,因此不需要通过
void Py_INCREF(PyObject*o)
void Py_DECREF(PyObject*o)
维护这些对象的引用计数。当您说要将
PyObject*
结果传输到C数组中时,您是指
PyObject*
的C数组,还是希望将这些数组成员对象也转换为更原生的C表示形式?@KenClement我可能也这么说。如果我没弄错的话,我可以使用Pystring\u fromstring单独翻译它的成员。另一方面,当我在python中键入(arr[3])时,它告诉我它是unicode。这对字符串有什么影响吗?您使用
Pystring\u fromstring
的方法是正确的,但使用的Python版本(2.7或3.5)确实很重要。(另外,我可能会问你是在使用CPython、IronPython还是PyPy——我从你的评论中猜测它是CPython)2.7和3.5之间的差异将决定unicode是否会对
str
产生影响。在CPython 2.7
str
中,通常处理窄字符数据,而不是unicode。在3.5中,该区别已被删除(所有字符串均为unicode)。AP{I's在这方面不兼容。您使用的是哪个版本?