首页 > 其他分享 >pybind11基本用法

pybind11基本用法

时间:2023-06-17 11:45:23浏览次数:40  
标签:基本 int py 用法 add pybind11 arg example def

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'

 

标签:基本,int,py,用法,add,pybind11,arg,example,def
From: https://www.cnblogs.com/okmai77xue/p/17485554.html

相关文章

  • axios最最基础的用法
    axiosajax请求库,比较热门吗,这里是最基础的发送请求和接收参数  axios闲来无事一,axios的理解和使用一,axios的理解和使用服了,看弹幕给我看的没自信了。axios最基本的使用方式<!DOCTYPEhtml><htmllang="en"><head>  <metacharset="UTF-8">  <metahttp-equiv......
  • 小白学习应用构建分享-参照用法
     什么是参照?只看名词,不太好理解,我们看下图,是不是一看就明白了,参照就是一份输入参考,当用户进行输入时,可以从已有数据中进行选择。怎么创建参照?假设业务场景是一张采购单,其中一个字段是【物料品牌】,我们需要为【物料品牌】创建一个参照。2.1在业务对象中新增【品牌】业......
  • 逍遥自在学C语言 | 指针的基础用法
    前言在C语言中,指针是一项重要的概念,它允许我们直接访问和操作内存地址。可以说,指针是C语言一大优势。用得好,你写程序如同赵子龙百万军中取上将首级;用得不好,则各种问题层出不穷,有种双拳难敌四手的感觉。本文将介绍指针的基础知识,包括指针的定义、初始化、访问和运算。一、人物......
  • 数据结构(Python版)——3、基本结构
    数据结构(Python版)——3、基本结构什么是线性结构LinearStructure线性结构是一种有序数据项的集合,其中每个数据项都有唯一的前驱和后继除了第一个没有前驱,最后一个没有后继新的数据项加入到数据集中是,只会加入到原有某个数据项之前或之后具有这种性质的数据集,就称为线性结构......
  • Go语言之 go-redis 基本使用
    Go语言之go-redis基本使用Redis介绍Redis:https://redis.io/Redis中文网:https://www.redis.net.cn/REmoteDIctionaryServer(Redis)是一个由SalvatoreSanfilippo写的key-value存储系统。Redis是一个开源的使用ANSIC语言编写、遵守BSD协议、支持网络、可基于内存亦可持......
  • 系统架构设计师笔记第16期:数据库基本概念
    数据库技术的发展数据库技术在过去几十年中经历了显著的发展和演变。层次数据库和网状数据库:20世纪60年代和70年代初,层次数据库和网状数据库是主流的数据库模型。层次数据库使用树状结构组织数据,而网状数据库使用复杂的网络结构。这些数据库模型适用于特定的数据组织和查询需求,但缺......
  • Python学了基本语法 下一步该干什么 ?
    刚入门Python,学习了基本语法后,你可以开始编写简单的程序了。接下来,你可以学习Python的标准库和第三方库,掌握更多的编程技巧和知识,提高自己的编程能力。同时,也可以通过实践项目来巩固所学知识,提高自己的实战能力。学习Python基本语法是入门的第一步,接下来你可以考虑以下几个方向......
  • 基本概念
    什么是认证进入移动互联网时代,大家每天都在刷手机,常用的软件有微信、支付宝、头条等,下边拿微信来举例子说明认证相关的基本概念,在初次使用微信前需要注册成为微信用户,然后输入账号和密码即可登录微信,输入账号和密码登录微信的过程就是认证。系统为什么要认证?认证是为了保护系统......
  • createelement的用法(转载)
    document.createElement()是在对象中创建一个对象,要与appendChild()或insertBefore()方法联合使用。其中,appendChild()方法在节点的子节点列表末添加新的子节点。insertBefore()方法在节点的子节点列表任意位置插入新的节点。​下面,举例说明document.createElement()的用......
  • Scala基本语法
    scala的基本语法注释对于scala的注释,简而言之就是一句话,和java的注释一模一样基本语法(1)单行注释://(2)多行注释:/**/(3)文档注释:/****/代码示例:packagecom.doitedu.demo01objectTestNotes{defmain(args:Array[String]):Unit={//(1)......