Python C Api将PyObject*传输到C数组中
我使用了pythoncapi,希望从python获得一个数组。我从python端返回了一个python数组,并希望将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\
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.7str
中,通常处理窄字符数据,而不是unicode。在3.5中,该区别已被删除(所有字符串均为unicode)。AP{I's在这方面不兼容。您使用的是哪个版本?