python编程(python和c相互调用)

栏目: Python · 发布时间: 6年前

内容简介:python编程(python和c相互调用)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】   

通常为了扩展 python 的功能,我们需要将c库移植到python上面。python和c调用一般分成两种情况,一种是python调用c,这种情况最为普遍,也比较简单。另外一种就是c调用python,这种情况多出现在有回调函数的时候。

1、利用ctypes实现python调用c

用ctypes调用c是一种比较简单的方法,比如说,有这么一个c文件,

int add(int x, int y){
	return (x+y);  
}

我们首先将它编译成动态库的形式,

gcc -fPIC -shared -o libAdd.so  add.c

有了这个动态库,我们就可以用ctypes调用它了,比如说python文件是这样的,

import ctypes
l = ctypes.CDLL("./libAdd.so");
num = l.add(3,4)

有了一个动态库,再加上这个python文件,基本上就可以完成python对c的调用了。

2、c调用python

这种情况多出现在回调函数上,比如说事件响应,定时器等等。一般的操作是这样的,假设有一个python文件,

def show(name): 
        print "this is ",name

为了实现c对python的调用,还需要一个c文件,

#include <Python.h> 
int main() {   
        Py_Initialize();   
        if (!Py_IsInitialized())  return -1; 
        PyRun_SimpleString("import sys");
        PyRun_SimpleString("sys.path.append('./')");
 
        //import Module 
        PyObject* pModule = PyImport_ImportModule("hello");   
        if (!pModule) {   
                printf("Can't import Module!/n");   
                return -1;   
        }   
 
        PyObject* pDict = PyModule_GetDict(pModule);   
        if (!pDict) {   
                return -1;   
        }   
   
        //fetch Function 
        PyObject* pFunHi = PyDict_GetItemString(pDict, "show");   
        PyObject_CallFunction(pFunHi, "s", "tim");   
        Py_DECREF(pFunHi);   
  
        //Release 
        Py_DECREF(pModule);   
        Py_Finalize();   
        return 0;   
}
同样,在使用之前,需要好好编译一下,
gcc process.c -I/usr/include/python2.7 -ldl -lutil -lpthread -lpython2.7 -o process
如果这个时候,你可以正常执行process文件,那么说明c调用python成功了。c调用python一般需要先找到python的字符,再进行调用。熟悉 lua 的同学,看到这里应该再熟悉不过了。

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

神经网络与机器学习(原书第3版)

神经网络与机器学习(原书第3版)

[加] Simon Haykin / 申富饶、徐烨、郑俊、晁静 / 机械工业出版社 / 2011-3 / 79.00元

神经网络是计算智能和机器学习的重要分支,在诸多领域都取得了很大的成功。在众多神经网络著作中,影响最为广泛的是Simon Haykin的《神经网络原理》(第3版更名为《神经网络与机器学习》)。在本书中,作者结合近年来神经网络和机器学习的最新进展,从理论和实际应用出发,全面、系统地介绍了神经网络的基本模型、方法和技术,并将神经网络和机器学习有机地结合在一起。 本书不但注重对数学分析方法和理论的探......一起来看看 《神经网络与机器学习(原书第3版)》 这本书的介绍吧!

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

html转js在线工具
html转js在线工具

html转js在线工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具