python函数的封装调用_用pybind11封装C++实现的函数库

Apple iPhone 11 (A2223) 128GB 黑色 移动联通电信4G手机 双卡双待

4999元包邮

去购买 >

iphone.jpg

现有若干用C++编写的函数,为了能够用Python调用它们,可以通过pybind11将它们封装到一个Python模块中,在编写Python程序时只要导入该模块便能使用这些函数。

一.实现步骤

用C++函数实现函数功能;

编写头文件,将函数的声明包含在头文件中;

编写pybind11封装函数;

用Python编写setup脚本;

生成动态链接库pyd文件;

测试函数功能。

bVbDIIR

二.代码实现

1.用C++函数实现函数功能

//文件名:add.cpp

extern "C" double add(double in1, double in2)

{

return in1 + in2;

}

//文件名:sub.cpp

extern "C" double sub(double in1, double in2)

{

return in1 - in2;

}

//文件名:mul.cpp

extern "C" double mul(double in1, double in2)

{

return in1 * in2;

}

//文件名:div.cpp

extern "C" double div1(double in1, double in2)

{

return in1 / in2;

}

2.编写头文件,将函数的声明包含在头文件中

//文件名:functions.h

#ifndef FUNCTIONS_H

#define FUNCTIONS_H

#include

using namespace std;

extern "C" double add(double, double);

extern "C" double sub(double, double);

extern "C" double mul(double, double);

extern "C" double div1(double, double);

#endif

3.编写pybind11封装函数

//文件名:functions_wrapper.cpp

#include

#include "functions.h"

namespace py = pybind11;

PYBIND11_MODULE(functions, m){

m.doc() = "Simple Class";

m.def("add", &add);

m.def("sub", &sub);

m.def("mul", &mul);

m.def("div", &div1);

}

4.用Python编写setup脚本

#文件名:setup.py

from setuptools import setup, Extension

functions_module = Extension(

name = 'functions',

sources = ['add.cpp', 'sub.cpp', 'mul.cpp', 'div.cpp', 'functions_wrapper.cpp'],

include_dirs = [r'D:\software\pybind11-master\include',

r'D:\software\Anaconda\include']

)

setup(ext_modules = [functions_module])

5.生成动态链接库pyd文件

在命令行执行python setup.py build_ext --inplace,在当前路径下生成pyd动态库。

bVbDIJu

bVbDIJ5

6.测试函数功能

#文件名:test.py

import functions

print(functions.add(0.9, 3))

print(functions.sub(0.9, 3))

print(functions.mul(0.9, 3))

print(functions.div(0.9, 3))

output:

3.9

-2.1

2.7

0.3

jd_dn250.png

jd_sj250.jpg

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值