位置: 编程技术 - 正文

Python调用C++程序的方法详解(python如何调用c程序)

编辑:rootadmin

推荐整理分享Python调用C++程序的方法详解(python如何调用c程序),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:python 调用 c,python 调用 c,python调用c语言程序,python调用c++sdk,python调用c程序,python 调用 c,python调用c程序,python 调用c++程序,内容如对您有帮助,希望把文章链接给更多的朋友!

前言

大家都知道Python的优点是开发效率高,使用方便,C++则是运行效率高,这两者可以相辅相成,不管是在Python项目中嵌入C++代码,或是在C++项目中用Python实现外围功能,都可能遇到Python调用C++模块的需求,下面列举出集中c++代码导出成Python接口的几种基本方法,一起来学习学习吧。

原生态导出

Python解释器就是用C实现,因此只要我们的C++的数据结构能让Python认识,理论上就是可以被直接调用的。我们实现test1.cpp如下

编译命令如下

运行Python解释器,测试如下

这里要注意一下几点

如果生成的动态库名字为test1,则源文件里必须有inittest1这个函数,且Py_InitModule的第一个参数必须是“test1”,否则Python导入模块会失败 如果是cpp源文件,inittest1函数必须用extern "C"修饰,如果是c源文件,则不需要。原因是Python解释器在导入库时会寻找initxxx这样的函数,而C和C++对函数符号的编码方式不同,C++在对函数符号进行编码时会考虑函数长度和参数类型,具体可以通过nm test1.so查看函数符号,c++filt工具可通过符号反解出函数原型

通过boost实现

我们使用和上面同样的例子,实现test2.cpp如下

其中BOOST_PYTHON_MODULE的参数为要导出的模块名字

编译命令如下

注意: 编译时需要指定boost头文件和库的路径,我这里分别是/usr/local/include和/usr/local/lib

或者通过setup.py导出模块

Extension的第一个参数为模块名,第二个参数为文件名

执行如下命令

这时会生成build目录,找到里面的test2.so,并进入同一级目录,验证如下

Python调用C++程序的方法详解(python如何调用c程序)

导出类

test3.cpp实现如下

注意:BOOST_PYTHON_MODULE里的.def使用方法有点类似Python的语法,等同于

编译命令如下

测试如下

导出变参函数

test4.cpp实现如下

这里Add和Del函数均采用了默认参数,Del为普通函数,Add为类成员函数,这里分别调用了不同的宏,宏的最后两个参数分别代表函数的最少参数个数和最多参数个数

编译命令如下

测试如下

导出带Python对象的接口

既然是导出为Python接口,调用者难免会使用Python特有的数据结构,比如tuple,list,dict,由于原生态方法太麻烦,这里只记录boost的使用方法,假设要实现如下的Python函数功能

即对传入的list每个元素计算平方,返回list类型的结果

代码如下

编译命令如下

测试如下

boost实现了boost::python::tuple, boost::python::list, boost::python::dict这几个数据类型,使用方法基本和Python保持一致,具体方法可以查看boost头文件里的boost/python/tuple.hpp及其它对应文件

另外比较常用的一个函数是boost::python::make_tuple() ,使用方法如下

总结

标签: python如何调用c程序

本文链接地址:https://www.jiuchutong.com/biancheng/380017.html 转载请保留说明!

上一篇:python中import学习备忘笔记(python import怎么用)

下一篇:python3+PyQt5实现使用剪贴板做复制与粘帖示例

  • 进项税额转出会计分录月末如何结转
  • 公司代缴个人所得税做账
  • 非营利组织免税收入
  • 如何开银行卡账户
  • 企业所得税汇算清缴退税怎么做账
  • 转账支票背书转让样本
  • 被列为经营异常名录有什么影响
  • 投资损益表该如何填列
  • 服务业发票丢失怎么处理
  • 原材料购入和转出做账
  • 个体行业哪些不需要交税
  • 核定征收所得税税率
  • 扣除工资作为违约金
  • 什么情况下需要写答
  • 顾问费属于劳务费吗
  • 土地成本费用包括什么
  • 计提工资多计提,如何做冲销
  • 自查补缴税款严重吗
  • 固定资产抵扣进项
  • 计提员工社保拿什么做原始凭证?
  • 如何编制固定资产折旧计算表
  • OS X Yosemite系统下载失败怎么办?OS X 10.10下载错误解决方法
  • 开房租发票交的税,因优惠政策退税,怎么账务处理
  • 为什么说人与人的悲欢不相通
  • 公司赚的钱要交税吗?交多少?
  • 营改增后的增值税税目税率表
  • replace.exe进程
  • 怎么查发票的真假鉴定
  • php文件包含的4种方式
  • 一年的云信承兑汇票如何提现
  • 嵌入式从业10年,聊聊我对工业互联网和消费物联网的看法 | 文末赠书4本
  • 用jsp实现用户登录验证
  • 城投公司政府购买棚改
  • 罚款是否需要开证明
  • 城镇土地使用税优惠政策
  • 未确认融资费用账务处理
  • 捐赠商品分录
  • 公司注销剩余的发票怎么作废
  • 差额征税扣除额的具体规定
  • 营业税金及附加是什么科目
  • 项目投标代理服务方案
  • 暂估收入的会计分录怎么写
  • 结转销售成本的分录
  • 小规模红冲发票怎么做分录
  • 直接人工成本项目
  • 收到假钱怎么算损失
  • 销售废旧物资账务处理
  • 出口退税对应的进项不能抵扣对吗
  • 个人向对公账户付款有风险吗
  • 子公司提取盈余公积
  • 没有发票的福利费支出可以税前扣除吗
  • 税控盘和金税盘一样吗
  • 会计核算采用什么形式
  • sqlserver全文索引
  • sql必会知识
  • workbench如何运行
  • win2003远程桌面最大连接数
  • win8.1系统安装教程
  • phpstudy中phpmyadmin无法访问
  • ubuntu18.04更新到20.04
  • 苹果mac安装win7系统
  • safari macos
  • mac osx 10.8
  • windowsxp的安装方法
  • win8系统升级
  • win10正式版激活码
  • 怎样修改linux用户名和密码
  • win10预览版好吗
  • cocos2dx 3.1.1 win8+eclipse环境下android游戏开发环境搭建
  • jqueryui
  • gridview添加数据
  • 下载一个网页的所有图片
  • dos命令大全及用法
  • python读配置文件配置信息
  • net user %username%
  • shell嵌套for循环
  • 水利建设基金的税率
  • 企业房产税公式
  • 福建电子税务局登录入口
  • 税收优惠政策有经营和居民住宅出租
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设