• 技术文章 >后端开发 >Python教程

    python怎么用c++代码

    (*-*)浩(*-*)浩2019-07-04 09:20:17原创2634
    大家都知道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++代码的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:python
    上一篇:python的爬虫是什么意思 下一篇:python爬虫一般都爬什么信息
    千万级数据并发解决方案

    相关文章推荐

    • 安装python后如何通过Python打开网页• python卸载不了怎么办• python为什么不能以数字开头• 怎么在cmd运行python
    1/1

    PHP中文网