Jquery中文网 www.jquerycn.cn
Jquery中文网 >  脚本编程  >  php  >  正文 python怎么用c 代码

python怎么用c 代码

发布时间:2020-10-22   编辑:www.jquerycn.cn
jquery中文网为您提供python怎么用c 代码等资源,欢迎您收藏本站,我们将为您提供最新的python怎么用c 代码资源
大家都知道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 代码的详细内容,更多请关注jquery中文网其它相关文章!

  • 本文原创发布jQuery中文网,转载请注明出处,感谢您的尊重!
  • 您可能感兴趣的文章:
    python程序如何工作
    python怎么输出中文
    python怎么才能使随机整数不重复
    怎么使用python查看网页源代码
    python怎么打开txt文件
    python lambda怎么用
    自学Python难吗
    linux怎么查看python的安装路径
    python怎么用c 代码
    python怎么隐藏一段代码

    [关闭]