在python中嵌入c/c++

分类: c python 2897人阅读 评论(0) 收藏 举报
pythoncompilergccnullc语言

学习python是一个令人振奋不已的过程,python是一个如此powerfull的高级语言,简单却功能强大,库多而又功能齐全,几乎可以帮助我们完成任何一项工作。它唯一的缺陷就是跑得慢,在跑得慢的问题上,它有有着令人振奋的解决方案,嵌入c/c++代码的方法。一个程序80%的时间运行在20%的代码上,我们只要用c重写那20%的代码,便可缔造完美程序。
   除了运行速度问题,还有其他可以用c来增强的功能。如python2.5可递归栈的最大层次是999,而c却远远大于这个限制。

exmaple.c

  1. /*
  2. * =============================================================================
  3. ========
  4. *
  5. *       Filename:  example.c
  6. *
  7. *    Description:  embed c in python
  8. *
  9. *        Version:  1.0
  10. *        Created:  2008年12月15日 20时48分19秒
  11. *       Revision:  none
  12. *       Compiler:  gcc
  13. *
  14. *         Author:  Li WeiJian (mn), lwj1396@163.com
  15. *        Company:  hunan university
  16. *
  17. * =============================================================================
  18. ========
  19. */
  20. int fact(int n)
  21. {
  22. if(n <= 1)
  23. return 1;
  24. else
  25. return n*fact(n-1);
  26. }

wrap.c

  1. /*
  2. * =============================================================================
  3. ========
  4. *
  5. *       Filename:  wrap.c
  6. *
  7. *    Description:  c and python
  8. *
  9. *        Version:  1.0
  10. *        Created:  2008年12月15日 20时49分11秒
  11. *       Revision:  none
  12. *       Compiler:  gcc
  13. *
  14. *         Author:  Li WeiJian (mn), lwj1396@163.com
  15. *        Company:  hunan university
  16. *
  17. * =============================================================================
  18. ========
  19. */
  20. #include<Python.h>
  21. //导出函数
  22. PyObject *wrap_fact(PyObject* self,PyObject* args)
  23. {
  24. int n,result;
  25. if (!PyArg_ParseTuple(args,"i:fact",&n))
  26. return NULL;
  27. result=fact(n);
  28. return Py_BuildValue("i",result);
  29. }
  30. //方法列表
  31. static PyMethodDef exampleMethods[]=
  32. {
  33. {"fact",wrap_fact,METH_VARARGS,"Caculate N!"},
  34. {NULL,NULL}
  35. };
  36. //初始化函数
  37. void initexample()
  38. {
  39. PyObject* m;
  40. m=Py_InitModule("example",exampleMethods);
  41. }

编译

gcc -fpic -c -I/usr/include/python2.5 /-I /usr/lib/python2.5/config /example.c wrapper.c
gcc -shared -o example.so example.o wrapper.o

fact.py

  1. import example
  2. import datetime
  3. def fact(n):
  4. if n<=1:return 1
  5. else:return n*fact(n-1)
  6. if __name__=='__main__':
  7. now=datetime.datetime.now()
  8. for i in range(10000):
  9. n=fact(100)
  10. end=datetime.datetime.now()
  11. print 'the python fact takes:',end-now
  12. for i in range(10000):
  13. n=example.fact(100)
  14. print 'the c fact taks:',datetime.datetime.now()-end

运行结果:
lwj@lwj-desktop:~/code/python$   python fact.py
the python fact takes: 0:00:01.214449
the c fact taks: 0:00:00.121041

c要快了》10倍。不过还没测试过单纯的c的环境。。。有空再测测。。。。
另外python本身只能递归999层深度
c没有这个限制

在python中嵌入c/c++相关推荐

  1. python使用textwrap包在已经生成的长字符串中嵌入回车符实战

    python使用textwrap包在已经生成的长字符串中嵌入回车符实战 目录 python使用textwrap包在已经生成的长字符串中嵌入回车符实战 # textwrap包在长字符串中嵌入回车符 #实 ...

  2. 在C/C++中嵌入Python

    在C/C++中嵌入Python也比较简单,首先需要在VC中添加Python的include文件目录和lib文件目录: VC6.0下,打开tools->options->directorie ...

  3. c中嵌入Python,提供灵活性

    我的项目进行到这个时候才发现仅仅只有c还是不能完成所有的事情,为了提供更好的个性化应用,需要一个解释性语言加入到体系中来,对比发现Python是最好的选择,不管是从性能上讲还是内存管理等各方面将都有独 ...

  4. python嵌套html开发gui_如何在Python Tkinter GUI中嵌入Cartopy?

    我想在Windows 7 PC上的Python(2.7)Tkinter GUI应用程序中嵌入Cartopy模块图,但是我需要帮助弄清楚如何做. 据我了解,Cartopy模块仅使matplotlib能够 ...

  5. 在python程序中嵌入浏览器_用Python中的wxPython实现最基本的浏览器功能

    通常,大多数应用程序通过保持 HTML 简单来解决大多数浏览器问题 ― 或者说,根据最低共同特性来编写.然而,即便如此,也仍然存在字体和布局的问题,发行新浏览器和升级现有浏览器时,也免不了测试应用程序 ...

  6. python嵌入到程序_在应用中嵌入Python:转

    前面的章节讨论如何扩展Python,如何生成适合的C库等.不过还有另一种情况:通过将Python嵌入C/C++应用以扩展程序的功能.Python嵌入实现了一些使用Python更合适的功能.这可以有很多 ...

  7. 在应用中嵌入Python

    翻译: gashero 前面的章节讨论如何扩展Python,如何生成适合的C库等.不过还有另一种情况:通过将Python嵌入C/C++应用以扩展程序的功能.Python嵌入实现了一些使用Python更 ...

  8. 在应用中嵌入Python - lf8289的专栏 - CSDNBlog

    在应用中嵌入Python - lf8289的专栏 - CSDNBlog " 在应用中嵌入Python收藏 新一篇: 软件在线升级设计方案及演变过程分析 | 旧一篇: 在windows下面关闭 ...

  9. python嵌入到qt_在Qt图形用户界面中嵌入绘图

    vpython的FAQs声称vpython的体系结构使任何嵌入都成为一个问题-: Q:有没有办法在另一个环境中嵌入VPython?This is difficult because VPython h ...

最新文章

  1. Android startActivityForResult
  2. hdu4287 水题
  3. python和javascript详细对比_python与javascript 引入模块的方法对比
  4. 基站建设(三元环计数+根号分治 / bitset)
  5. 在比特币世界中矿工的作用是什么
  6. PCM信号是什么信号?
  7. 集合使用与内部实现原理
  8. 「あるいは」 「もしくは」 「または」 「それとも」的区别
  9. 第1节 flume:15、flume案例二,通过自定义拦截器实现数据的脱敏
  10. 加载MNIST数据集
  11. 电机与拖动matlab仿真,Matlab仿真软件在电机与拖动中的应用
  12. PHP获取今日农历日期
  13. 学习日记day35 平面设计 作品练习字体设计
  14. 计算机粘贴复制知识,不能复制粘贴怎么办?Win7电脑不能复制粘贴是什么原因及解决方法...
  15. Dennis Gabor与全息摄影
  16. [附源码]Python计算机毕业设计高校社团管理系统Django(程序+LW)
  17. 计算机中的数据是一个广义的概念,广义数据结构
  18. 提高编程效率的5大VS Code插件
  19. G1CTF-2021 WP
  20. UG NX 12 同步建模:拉出面

热门文章

  1. 其实,我们需要的并不多
  2. ROBOMASTER 2018机甲大师赛 南部赛区三等奖!
  3. 2019中韩版权研讨会举行 网络成版权保护主战场
  4. 用vim 配置javascript
  5. [arm 驱动]Linux输入子系统分析
  6. 毁掉云计算项目的三个“好办法”
  7. 记一次使用 android 自带 WebView 做富文本编辑器之API、机型的兼容及各种奇葩bug的解决...
  8. Altiris 7.1 安装
  9. 跨语言平台的RSA加密、解密、签名、验证算法的实现
  10. NYOJ 5177 疯牛(最大化最小值 二分搜索)