位置: 编程技术 - 正文

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实现使用剪贴板做复制与粘帖示例

  • 怎么计提坏账准备到本年利润
  • 发票丢失的税务处罚
  • 医院这么开发票
  • 营业收入与利润变化图
  • 免税苗木普通发票
  • 处置长投时其他权益变动
  • 2019未达起征点免税分录
  • 预提费用账户期末
  • 电子承兑汇票接收和转出步骤
  • 一般存款账户可以办理现金缴存
  • 营改增后建筑公司自建行为所得税
  • 小规模都纳什么税
  • 营改增典型案例
  • 未收到发票可以计提成本吗
  • 少计提的增值税怎么处理
  • 没有三方协议怎么缴纳社保
  • 关于增值税的问题有哪些
  • 固定资产转固流程图
  • 耕地占用税与土地出让金
  • 子公司评估增值 出售股权
  • 企业支出的资产包括哪些
  • 会计师事务所执业许可和监督管理办法
  • 出口企业预申报没有增值税专用发票稽核信息如何处理?
  • w11系统激活码
  • 开启网络共享后怎么使用
  • 什么是电流定律
  • 电脑不能上网是什么原因?
  • 计算机系统结构第三版课后答案
  • uc浏览器不让访问网页
  • 怎么添加动态磁贴
  • php中字符串函数
  • 数据处理主要内容有哪些?
  • 供电企业收费项目管理的暂行规定
  • php阿里云oss
  • 税务机关如何判别c开发票视频
  • php获取文件内容的函数
  • 电子发票有哪些种类
  • 资产负债表利润表和现金流量表
  • 其他经营收益怎么算
  • vue开发环境配置
  • pytorch新手入门
  • 免费下载含羞草视频影视站苹果CMSv10高级主题模版破解无授权-OK源码破解
  • 开票软件密码和口令锁定了,怎么解锁
  • 收入的确认规则
  • React props全面详细解析
  • opengl全称
  • 固定资产是价税合计吗
  • 有效税额可以更改吗
  • 进口货物如何支付外汇
  • 营业成本包含哪些项目
  • 企业出售自用车辆的会计处理
  • 现金预算包括哪些内容,来源是什么
  • 平销返利如何开票是负数的
  • 海关报关单海关签章
  • 会计凭证的做账原则
  • 装修属于营业费用还是管理费用
  • 公司给员工结婚红包
  • 预提与计提的区别在哪里
  • 非限定性净资产 限定性净资产
  • 小规模销售免税产品需要交税吗
  • 生育津贴申请流程
  • 防止服务器断电
  • 重装win7系统后鼠标反应慢
  • 微软9月补丁
  • 配置windows server essentials出错
  • windows开始搜索栏
  • win7 64位系统无法使用银行网银怎么办? IE9浏览器无法使用农业银行网银的解决方法
  • win8进入传统界面
  • linux系统怎么切换到命令行
  • win7系统浏览器版本老怎么升级
  • linux系统怎么配置路由
  • 宽带连接错误628win10
  • win8任务栏在底部不显示
  • shell source不起作用
  • javascript教程
  • unity移动ui
  • 大叔sam1
  • unity 内存管理
  • 车辆购置税二维码扫描用什么扫
  • 耕地占用税减免支持项目发展
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设