我有一个Python列表,我可以获取它的指针,并将此指针地址传递给C++进行处理
MyPointer = TheList.as_pointer()
Run Code Online (Sandbox Code Playgroud)
现在我用ctypes将这个地址传递给C++
在C++中,我可以执行以下操作:
*(float*) MyPointer = 2.0f; //for example
Run Code Online (Sandbox Code Playgroud)
并且Python值会立即更新,现在的问题是:如何扩展或删除一些值(比如直接从C++修改列表),因为我感觉这些数据是std::vector如何做的push_back等等以快速方式调整大小(在Python中迭代几乎是缓慢的)
只给出该指针,您无法扩展列表.传递给C++的是内部用于实现Python列表的数组的地址.这不是一个std::vector,因为Python列表不是作为STL向量实现的,而是作为Python对象引用的C级数组实现的.这些数组不包含Python列表对象的后向指针.
要改变列表,请查看文档并将C++代码与Python库链接.如果你真的必须从ctypes调用你的C++函数,用它id的列表调用它来获取指向列表的指针,而不是它的元素数组.然后你可以像这样操作列表:
#include <Python.h>
extern "C"
void append_to_list(uintptr_t lst_id)
{
PyObject* lst = reinterpret_cast<PyObject*>(ptr);
PyObject* new_num = PyFloat_FromDouble(2.0);
if (!new_num) {
... PyFloat creation failed ...
}
int ret = PyList_Append(lst, new_num);
Py_DECREF(new_num);
if (ret) {
... PyList_Append failed ...
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
747 次 |
| 最近记录: |