pybind11中文资料(目录+第一章 关于本项目 第二章、第三章)

本文主要是介绍pybind11中文资料(目录+第一章 关于本项目 第二章、第三章),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

之前给了自己立下了目标,要把pybind11资料整理一下,我就把英文的资料翻译一下,当然了,限于本人英语水平,肯定是需要百度翻译和谷歌翻译等翻译工具的帮助的,我尽量将我理解的意思翻译下来,如果有一些翻译不当的地方也欢迎大家斧正。

今天我们就先翻译目录和第一章,通过目录我们可以看到pybind11资料整体内容,第一章虽对我们的实践影响不大,但可以通过第一章可以了解pybind11为我们提供了哪些特性,让我们对pybind11有一个整体的印象

在此我要特别感谢pybind11项目创立者 Wenzel Jakob以及众多项目参与者

1 关于本项目

2 更新日志

3 升级指南

4 第一步

5 面向对象的代码

6 构建系统

7 功能

8 类

9 例外

10 智能指针

11 类型转换

12 Python C++ 接口

13 嵌入解释器

14 杂项

15 经常询问的问题

16 检测

17 限制

18 参考

 

1关于本项目

pybind11是一个只有头文件的轻量级库,它向Python暴露了C++的类型同时也向C++暴露了Python类型,pybind11主要用于创建现有C++代码的Python绑定。它的目标和语法类似于David Abrahams的Boost.Python库:通过编译自省的推断类型信息来最小化传统扩展模块中的样板代码。

Boost.Python的主要问题是Boost,这也是创建这样一个类似项目的原因。Boost是一个非常庞大且复杂的实用程序库套件,并且Boost几乎适用于所有C ++编译器。这种兼容性是有成本的:为了支持最古老和bug最多的编译器版本,晦涩难懂的模板技巧以及各种变通方法是必需的。现在,C++11兼容的编译器已经广泛使用,这种沉重结构已成为一种过大且不必要的依赖。可以把pybind11库想象成Boost.Python的一个小型自包含版本,其中所有与python绑定生成无关的内容都被删除了。pybind11没有注释,而且核心头文件只需要大约4K行的代码,并且只依赖于Python(2.7或3.x,或PyPy2.7> = 5.7)和C ++标准库。由于一些新的C++11语言特性(特别是:元组,lambda函数和可变参数模板),这种紧凑的实现成为可能。自创建以来,这个库已经在很多方面超越了Boost.Python,许多常见情况下pybind11使得python绑定代码变得非常简单。

1.1 核心功能

以下核心C ++功能可以映射到Python

  • 函数入参和返回值可以是自定义数据结构的值、引用或者指针

  • 实例方法和静态方法

  • 重载功能

  • 实例属性和静态属性

  • 任意异常类型

  • 枚举

  • 回调

  • 迭代器和范围

  • 自定义操作符

  • 单继承和多继承

  • STL数据结构

  • 带有引用计数的智能指针,类似于std::shared_ptr

  • 正确的引用计数的内部引用

  • 带有虚函数和纯虚函数的C ++类可以在Python中扩展

1.2 好东西

除了核心功能外,pybind11还提供了一些额外的好东西:

  • Python 2.7,3.x和PyPy(PyPy2.7> = 5.7)支持与实现无关的接口。

  • 可以将C++11 lambda函数与捕获的变量绑定在一起。lambda捕获的数据存储在生成的Python函数对象中。

  • pybind11使用C++11move constructors 和 move assignment operators从而有效地转换自定义数据类型。

  • 通过Python的缓冲协议,可以很容易地公开内部存储的自定义数据类型。C++矩阵类型如Eigen和NumPy之间进行快速转换是轻而易举的。

  • pybind11可以自动将函数矢量化,以便它们透明地应用于以NumPy数组为参数的所有条目。

  • 只需几行代码就可以支持Python的基于切片的访问和赋值操作。

  • 一切都只包含在几个头文件中,没有必要链接任何其他库。

  • 二级制文件更小,编译时间更少。

  • 只需很少的额外工作,C ++类型就可以像Python对象一样进行pickled和unpickled。

1.3支持的编译器

  1. Clang / LLVM(支持C ++ 11的任何版本)

  2. GCC 4.8或更新版本

  3. Microsoft Visual Studio 2015或更高版本

  4. Intel C++ compiler v17或更新版本(v16与pybind11 v2.0和v15与pybind11 v2.0)

2 更新日志

这里就不翻译这部分了,大家想看更新日志的话直接到英文文档里看就可以了

3 升级指南

升级指针跟更新日志配套使用,主要是一些api的弃用和替换,这里我也不做翻译了

这篇关于pybind11中文资料(目录+第一章 关于本项目 第二章、第三章)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1033345

相关文章

Go语言实现将中文转化为拼音功能

《Go语言实现将中文转化为拼音功能》这篇文章主要为大家详细介绍了Go语言中如何实现将中文转化为拼音功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 有这么一个需求:新用户入职 创建一系列账号比较麻烦,打算通过接口传入姓名进行初始化。想把姓名转化成拼音。因为有些账号即需要中文也需要英

Python 中 requests 与 aiohttp 在实际项目中的选择策略详解

《Python中requests与aiohttp在实际项目中的选择策略详解》本文主要介绍了Python爬虫开发中常用的两个库requests和aiohttp的使用方法及其区别,通过实际项目案... 目录一、requests 库二、aiohttp 库三、requests 和 aiohttp 的比较四、requ

SpringBoot项目启动后自动加载系统配置的多种实现方式

《SpringBoot项目启动后自动加载系统配置的多种实现方式》:本文主要介绍SpringBoot项目启动后自动加载系统配置的多种实现方式,并通过代码示例讲解的非常详细,对大家的学习或工作有一定的... 目录1. 使用 CommandLineRunner实现方式:2. 使用 ApplicationRunne

使用IntelliJ IDEA创建简单的Java Web项目完整步骤

《使用IntelliJIDEA创建简单的JavaWeb项目完整步骤》:本文主要介绍如何使用IntelliJIDEA创建一个简单的JavaWeb项目,实现登录、注册和查看用户列表功能,使用Se... 目录前置准备项目功能实现步骤1. 创建项目2. 配置 Tomcat3. 项目文件结构4. 创建数据库和表5.

Python项目打包部署到服务器的实现

《Python项目打包部署到服务器的实现》本文主要介绍了PyCharm和Ubuntu服务器部署Python项目,包括打包、上传、安装和设置自启动服务的步骤,具有一定的参考价值,感兴趣的可以了解一下... 目录一、准备工作二、项目打包三、部署到服务器四、设置服务自启动一、准备工作开发环境:本文以PyChar

多模块的springboot项目发布指定模块的脚本方式

《多模块的springboot项目发布指定模块的脚本方式》该文章主要介绍了如何在多模块的SpringBoot项目中发布指定模块的脚本,作者原先的脚本会清理并编译所有模块,导致发布时间过长,通过简化脚本... 目录多模块的springboot项目发布指定模块的脚本1、不计成本地全部发布2、指定模块发布总结多模

SpringBoot项目删除Bean或者不加载Bean的问题解决

《SpringBoot项目删除Bean或者不加载Bean的问题解决》文章介绍了在SpringBoot项目中如何使用@ComponentScan注解和自定义过滤器实现不加载某些Bean的方法,本文通过实... 使用@ComponentScan注解中的@ComponentScan.Filter标记不加载。@C

javafx 如何将项目打包为 Windows 的可执行文件exe

《javafx如何将项目打包为Windows的可执行文件exe》文章介绍了三种将JavaFX项目打包为.exe文件的方法:方法1使用jpackage(适用于JDK14及以上版本),方法2使用La... 目录方法 1:使用 jpackage(适用于 JDK 14 及更高版本)方法 2:使用 Launch4j(

更改docker默认数据目录的方法步骤

《更改docker默认数据目录的方法步骤》本文主要介绍了更改docker默认数据目录的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1.查看docker是否存在并停止该服务2.挂载镜像并安装rsync便于备份3.取消挂载备份和迁

Docker集成CI/CD的项目实践

《Docker集成CI/CD的项目实践》本文主要介绍了Docker集成CI/CD的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录一、引言1.1 什么是 CI/CD?1.2 docker 在 CI/CD 中的作用二、Docke