在C++嵌入的pocketpy中高效赋值std::vector<float>为命名变量
在PocketPy中高效将std::vector赋值为全局变量v
要直接将原生创建的PocketPy List赋值给虚拟机中的全局变量v,你可以利用PocketPy虚拟机的全局字典API完成操作,完全无需通过字符串拼接和exec执行,这会大幅提升大向量场景下的效率。
完整实现步骤
- 遍历std::vector
创建原生PocketPy List
针对任意长度的向量,用循环遍历的方式填充List,避免手动逐个push的冗余代码:
#include <pocketpy.h> using namespace pkpy; // 假设x是你的std::vector<float> std::vector<float> x = {1.0f, 2.0f, 3.0f, 4.0f}; // 创建空的PocketPy List List t; for(float val : x){ t.push_back(py_var(vm, val)); } PyVar list_obj = py_var(vm, std::move(t));
- 将List赋值给虚拟机全局变量v
通过虚拟机的globals字典对象的set方法,直接将创建好的List绑定到全局变量名v:
// 将list_obj赋值为全局变量v vm->globals->set(vm, "v", list_obj);
验证有效性
你可以在后续通过exec执行Python代码验证变量是否正确:
vm->exec("print(v)"); // 输出应为: [1.0, 2.0, 3.0, 4.0]
这种方式完全绕过了字符串解析的开销,对于大尺寸的std::vector<float>来说,性能优势非常明显。
内容的提问来源于stack exchange,提问作者Bill Sellers
相关产品推荐
相关产品推荐

