旗下导航:搜·么
当前位置:网站首页 > Python教程 > 正文

python怎样用c++代码【Python教程】,python

作者:搜教程发布时间:2019-11-27分类:Python教程浏览:98评论:0


导读:人人都晓得Python的长处是开辟效率高,使用方便,C++则是运转效率高,这两者能够相辅相成,不管是在Python项目中嵌入C++代码,或是在C++项目顶用Python完成外围功用...
人人都晓得Python的长处是开辟效率高,使用方便,C++则是运转效率高,这两者能够相辅相成,不管是在Python项目中嵌入C++代码,或是在C++项目顶用Python完成外围功用,都能够碰到Python挪用C++模块的需求.

下面列举出集合c++代码导出成Python接口的要领,一起来进修进修吧。

原生态导出(引荐进修:Python视频教程)

Python诠释器就是用C完成,因而只需我们的C++的数据结构能让Python熟悉,理论上就是能够被直接挪用的。我们完成test1.cpp以下

#include <Python.h>
int Add(int x, int y)
{
return x + y;
}
int Del(int x, int y)
{
return x - y;
}
PyObject* WrappAdd(PyObject* self, PyObject* args)
{
int x, y;
if (!PyArg_ParseTuple(args, "ii", &x, &y))
{
return NULL;
}
return Py_BuildValue("i", Add(x, y));
}
PyObject* WrappDel(PyObject* self, PyObject* args)
{
int x, y;
if (!PyArg_ParseTuple(args, "ii", &x, &y))
{
return NULL;
}
return Py_BuildValue("i", Del(x, y));
}
static PyMethodDef test_methods[] = {
{"Add", WrappAdd, METH_VARARGS, "something"},
{"Del", WrappDel, METH_VARARGS, "something"},
{NULL, NULL}
};
extern "C"
void inittest1()
{
Py_InitModule("test1", test_methods);   
}

编译敕令以下

g++ -fPIC -shared test1.cpp -I/usr/include/python2.7 -o test1.so

-fPIC:生成位置无关目的代码,适用于动态衔接;
-L path:示意在path目次中搜刮库文件,如-L.示意在当前目次;
-I path:示意在path目次中搜刮头文件;
-o file:制订输出文件为file;
-shared:生成一个同享库文件;

运转Python诠释器,测试以下

>>> import test1
>>> test1.Add(1,2)
3

这里要注意一下几点

假如生成的动态库名字为test1,则源文件里必需有inittest1这个函数,且Py_InitModule的第一个参数必需是“test1”,不然Python导入模块会失利

假如是cpp源文件,inittest1函数必需用extern "C"润饰,假如是c源文件,则不须要。原因是Python诠释器在导入库时会寻觅initxxx如许的函数,而C和C++对函数标记的编码体式格局差别,C++在对函数标记举行编码时会斟酌函数长度和参数范例,细致能够经由过程nm test1.so检察函数标记,c++filt东西可经由过程标记反解出函数原型

更多Python相干技术文章,请接见Python教程栏目举行进修!

以上就是python怎样用c++代码的细致内容,更多请关注ki4网别的相干文章!

标签:python


欢迎 发表评论: