从c++修改python列表
modify a python list from C++
我得到了一个Python列表,我可以获得它的指针,并将这个指针地址传递给c++来处理
MyPointer = TheList.as_pointer()
现在我用ctypes
将这个地址传递给c++在c++中我可以做以下事情:
*(float*) MyPointer = 2.0f; //for example
和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 ...
}
}
相关文章:
- Pybind11:将元组列表从Python传递到C++
- 如何在C++中使用pybind11加载一个pickle python列表
- 替代在python中制作邻接列表与图形问题的字典?(如 C++ 中的 vector<vector<int&g
- C++未知长度字符串的数组,其行为类似于 Python 字符串列表
- 如何使用列表/数组在C++中实现 Python "... not in ..."?
- 在 c++ 中创建一个类似 python 的列表
- 如何通过ctypes将列表列表(非空)从Python传递到C++
- 在 DLL 中嵌入 Python:Py_DECREF列表对象时访问冲突读取位置
- 从 std::vector<double> 到 Python 列表的转换失败(提升 python)
- 使用 rangesv3 在 c++ 中模拟 python 风格的列表理解?
- 在C++中创建 python "列表"
- C - 将数字添加到列表中?(就像python)
- 将 std::list of structs 转换为 Python 列表
- 使用BOOST :: PYTHON返回裸露的类对象列表,这些对象是不可复制的
- 如何使用 Swig 将无符号字符* 转换为 Python 列表
- SWIG C++ to Python:生成 Python 列表的子类
- Python:我们应该如何编写一个函数来返回对象/列表和布尔标志
- 用eCmascript Regex验证Python列表索引语法
- 如何有效地将 2d python 列表馈送到 c++ 扩展模块
- 使用 Python API 获取 Maya 中的引用节点列表