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

Pybind11如何定义可变参数函数 接收Python传入的任意数量实参

Pybind11捕获任意数量位置参数实现方案

你只需要使用Pybind11内置的特殊参数类型py::args,即可自动捕获Python端传入的所有位置参数,无需调用方手动包装为列表。

修改后的绑定代码

将原有lambda的参数从std::vector<pybind11::object>替换为py::args,该类型支持迭代,可直接转换为你原有逻辑需要的std::vector<pybind11::object>:

namespace py = pybind11;

m.def("test", [](py::args args) {
    // 遍历py::args构造参数列表,传入原有执行逻辑
    std::vector<py::object> arg_list(args.begin(), args.end());
    return ExecuteFunction("test", arg_list);
});

调用效果

修改完成后Python端即可直接按你期望的形式调用,同时支持无参和任意数量位置参数传入:

# 传入多个位置参数
module.test("-2382.430176", "-610.183594", "12.673874")
# 无参调用
module.test()

补充说明

  • py::args本身支持和Python原生args一致的操作:可通过args.size()获取传入参数总数,通过args[i]按下标访问对应位置的参数,如果你不需要转换成std::vector,也可以直接操作py::args对象传入后续逻辑。
  • 如果后续需要同时捕获关键字参数,可以额外添加py::kwargs kwargs形式的参数,即可拿到所有传入的键值对参数。

内容的提问来源于stack exchange,提问作者MelonHell

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 09:39:18