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

标签 python c++ arrays python-c-api

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

无论如何我可以做到这一点吗?

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

return arr[3]

会导致 PyObject_callobject 返回 NULL 吗?

return arr

确实给了我一些东西

最佳答案

在 Python 中,“数组”是一种 list 数据类型。查看 C API 中的 PyList_* 函数。你可以找到这个引用 here for 2.7here 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/

相关文章:

python - Pyinstaller .exe 在 Windows 10 和 Windows 8.1 中不工作

c++ - For循环在自己的花括号内

javascript - 数组值未传递给插件

c - 二维数组的长度[i]

php - preg_match() 期望参数 2 为字符串,给定数组

python - 如何使用 FastAPI UploadFile 将多类型/表单数据保存到 Python 中的硬文件中?

python - 由于数据帧错误,无法绘制实时数据

python - 将 Python 结构解析为 PyObject

c++ - 混合 C++ 类继承和初始化列表。我心中的未解之谜

c++ - 当使用 Howard Hinnant 的 date.h header 时,为什么 Visual Studio 2017 会显示错误 'day_point' :undeclared identifier,?