简单谈谈用c++扩展Python模块

因为我自己比较喜欢Code::Blocks,因此,下面的介绍,我是用CB来弄的。使用的是MinGW的gcc编译器
虽然可以使用命令行来编译,不过我实在是不喜欢在windows cmd下用命令。。。。如果是linux,那就华丽地命令吧!

ok!进入正题!

咋们先写一个简单的函数,就是我们想要作为模块给Python也能使用的。
//demo.c
int simpleAdd(int x,int y)
{
    return x+y;
}

上面做了一个简单的两数相加的函数,现在要把这个函数变成Python模块。
接下来就是要写一个符合swig语法的信息文件,这个文件将要告诉swig如何到处函数,后缀是.i
//demo.i
%module demo
%{
extern simpleAdd(int x,int y);
%}

简单吧!%module后面是模块的名称。之后在%{...%}之间的是需要到处的函数或者类等等,添加extern说明需要导出函数。如果是c++,这里可以添加用%开头的 #include "....h"文件
在%{...%}之后跟的是函数申明(类的成员函数)。这里我只有一个函数,不是类里的,因此就不需要了。

然后我们需要使用swig来将我们需要的demo.c文件转换成demo_wrap.c接口文件。
命令如下
swig -python demo.c
swig -后跟的是需要转换的目标模块语言。
转换之后我们得到demo_wrap.c和demo.py文件,demo_wrap.c这个文件就是接口文件,里面将c/c++变量转换成了Python类型的。
demo.py文件就是模块调用的Python脚本。

接下来,打开Code::blocks(或者其他你喜欢的IDE)。新建一个空dll(动态链接库)项目,将之前我们编写的demo.c和得到的demo_wrap.c文件都加入到项目中。
设置项目属性,添加进Python的include文件夹目录和lib库目录。
设置输出文件,修改名字为_demo.pyd(必须是_开头,因为这是swig所要求的)
然后编译,我们就得到了_demo.pyd文件。将这个文件和之前得到的demo.py文件放在一起。

让我们写一个简单的Python脚本尝试下是否ok了。
#simple.py
import demo
res = demo.simpleAdd(3,4)
print res

运行这个脚本。得到结果:
7

ok!至此,扩展模块编辑结束,简单吧!
其实只要仔细了解.i信息文件的结构和规范,制作扩展模块就相当的方便啦!

用Python开发软件真的是相当快速。不过因为也是一种解释性语言,效率方面不可避免差一点点。因此要是开发比较大的软件,一般都是用Python开发GUI和其他接口连接等胶水程序,重要部分用c++重写,效率上就基本没有什么问题了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值