You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在C++嵌入的pocketpy中高效赋值std::vector<float>为命名变量

在PocketPy中高效将std::vector赋值为全局变量v

要直接将原生创建的PocketPy List赋值给虚拟机中的全局变量v,你可以利用PocketPy虚拟机的全局字典API完成操作,完全无需通过字符串拼接和exec执行,这会大幅提升大向量场景下的效率。

完整实现步骤

  1. 遍历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));
  1. 将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 05:00:05