pybind11基本用法
1、头文件和命名空间约定
#include <pybind11/pybind11.h>
namespace py = pybind11;
2、函数绑定
`PYBIND11_MODULE`会创建一个函数,它在Python中使用`import`语句时被调用。宏的第一个参数是模块名(example),不使用引号包住;第二个参数是类型为`py::module_`的变量(m),它是创建绑定的主要接口。`module_::def()`方法,则会生成add函数的Python绑定代码。
#include <pybind11/pybind11.h> int add(int i, int j) { return i + j; } PYBIND11_MODULE(example, m) { m.doc() = "pybind11 example plugin"; // optional module docstring m.def("add", &add, "A function which adds two numbers"); }
python
>>> import example
>>> example.add(1, 2)
3、关键字参数
arg是可用于将元数据传递到module::def()的几个特殊标记类之一。使用后可以在调用函数时使用关键字参数,以增加代码可读性,特别是对那些带有多个参数的函数。后缀`_a`会生成一个等价于`arg`方法的字面量。
m.def("add", &add, "A function which adds two numbers", py::arg("i"), py::arg("j")); //m.def("add2", &add, "i"_a, "j"_a); 简短写法 python import example example.add(i=1, j=2)
4、默认参数
pybind11不能自动地提取默认参数,因为它不属于函数类型信息的一部分。我们需要借助`arg`来实现这一功能:
int add(int i = 1, int j = 2) { return i + j; } m.def("add", &add, "A function which adds two numbers", py::arg("i") = 1, py::arg("j") = 2);
5、导出变量
使用`attr`函数来注册需要导出到Python模块中的C++变量
PYBIND11_MODULE(example, m) { m.attr("the_answer") = 42; py::object world = py::cast("World"); m.attr("what") = world; } pyhton >>> import example >>> example.the_answer 42 >>> example.what 'World'
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!