在python中嵌入c/c++
在python中嵌入c/c++
学习python是一个令人振奋不已的过程,python是一个如此powerfull的高级语言,简单却功能强大,库多而又功能齐全,几乎可以帮助我们完成任何一项工作。它唯一的缺陷就是跑得慢,在跑得慢的问题上,它有有着令人振奋的解决方案,嵌入c/c++代码的方法。一个程序80%的时间运行在20%的代码上,我们只要用c重写那20%的代码,便可缔造完美程序。
除了运行速度问题,还有其他可以用c来增强的功能。如python2.5可递归栈的最大层次是999,而c却远远大于这个限制。
exmaple.c
- /*
- * =============================================================================
- ========
- *
- * Filename: example.c
- *
- * Description: embed c in python
- *
- * Version: 1.0
- * Created: 2008年12月15日 20时48分19秒
- * Revision: none
- * Compiler: gcc
- *
- * Author: Li WeiJian (mn), lwj1396@163.com
- * Company: hunan university
- *
- * =============================================================================
- ========
- */
- int fact(int n)
- {
- if(n <= 1)
- return 1;
- else
- return n*fact(n-1);
- }
wrap.c
- /*
- * =============================================================================
- ========
- *
- * Filename: wrap.c
- *
- * Description: c and python
- *
- * Version: 1.0
- * Created: 2008年12月15日 20时49分11秒
- * Revision: none
- * Compiler: gcc
- *
- * Author: Li WeiJian (mn), lwj1396@163.com
- * Company: hunan university
- *
- * =============================================================================
- ========
- */
- #include<Python.h>
- //导出函数
- PyObject *wrap_fact(PyObject* self,PyObject* args)
- {
- int n,result;
- if (!PyArg_ParseTuple(args,"i:fact",&n))
- return NULL;
- result=fact(n);
- return Py_BuildValue("i",result);
- }
- //方法列表
- static PyMethodDef exampleMethods[]=
- {
- {"fact",wrap_fact,METH_VARARGS,"Caculate N!"},
- {NULL,NULL}
- };
- //初始化函数
- void initexample()
- {
- PyObject* m;
- m=Py_InitModule("example",exampleMethods);
- }
编译
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
- import example
- import datetime
- def fact(n):
- if n<=1:return 1
- else:return n*fact(n-1)
- if __name__=='__main__':
- now=datetime.datetime.now()
- for i in range(10000):
- n=fact(100)
- end=datetime.datetime.now()
- print 'the python fact takes:',end-now
- for i in range(10000):
- n=example.fact(100)
- 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++相关推荐
- python使用textwrap包在已经生成的长字符串中嵌入回车符实战
python使用textwrap包在已经生成的长字符串中嵌入回车符实战 目录 python使用textwrap包在已经生成的长字符串中嵌入回车符实战 # textwrap包在长字符串中嵌入回车符 #实 ...
- 在C/C++中嵌入Python
在C/C++中嵌入Python也比较简单,首先需要在VC中添加Python的include文件目录和lib文件目录: VC6.0下,打开tools->options->directorie ...
- c中嵌入Python,提供灵活性
我的项目进行到这个时候才发现仅仅只有c还是不能完成所有的事情,为了提供更好的个性化应用,需要一个解释性语言加入到体系中来,对比发现Python是最好的选择,不管是从性能上讲还是内存管理等各方面将都有独 ...
- python嵌套html开发gui_如何在Python Tkinter GUI中嵌入Cartopy?
我想在Windows 7 PC上的Python(2.7)Tkinter GUI应用程序中嵌入Cartopy模块图,但是我需要帮助弄清楚如何做. 据我了解,Cartopy模块仅使matplotlib能够 ...
- 在python程序中嵌入浏览器_用Python中的wxPython实现最基本的浏览器功能
通常,大多数应用程序通过保持 HTML 简单来解决大多数浏览器问题 ― 或者说,根据最低共同特性来编写.然而,即便如此,也仍然存在字体和布局的问题,发行新浏览器和升级现有浏览器时,也免不了测试应用程序 ...
- python嵌入到程序_在应用中嵌入Python:转
前面的章节讨论如何扩展Python,如何生成适合的C库等.不过还有另一种情况:通过将Python嵌入C/C++应用以扩展程序的功能.Python嵌入实现了一些使用Python更合适的功能.这可以有很多 ...
- 在应用中嵌入Python
翻译: gashero 前面的章节讨论如何扩展Python,如何生成适合的C库等.不过还有另一种情况:通过将Python嵌入C/C++应用以扩展程序的功能.Python嵌入实现了一些使用Python更 ...
- 在应用中嵌入Python - lf8289的专栏 - CSDNBlog
在应用中嵌入Python - lf8289的专栏 - CSDNBlog " 在应用中嵌入Python收藏 新一篇: 软件在线升级设计方案及演变过程分析 | 旧一篇: 在windows下面关闭 ...
- python嵌入到qt_在Qt图形用户界面中嵌入绘图
vpython的FAQs声称vpython的体系结构使任何嵌入都成为一个问题-: Q:有没有办法在另一个环境中嵌入VPython?This is difficult because VPython h ...
最新文章
- Android startActivityForResult
- hdu4287 水题
- python和javascript详细对比_python与javascript 引入模块的方法对比
- 基站建设(三元环计数+根号分治 / bitset)
- 在比特币世界中矿工的作用是什么
- PCM信号是什么信号?
- 集合使用与内部实现原理
- 「あるいは」 「もしくは」 「または」 「それとも」的区别
- 第1节 flume:15、flume案例二,通过自定义拦截器实现数据的脱敏
- 加载MNIST数据集
- 电机与拖动matlab仿真,Matlab仿真软件在电机与拖动中的应用
- PHP获取今日农历日期
- 学习日记day35 平面设计 作品练习字体设计
- 计算机粘贴复制知识,不能复制粘贴怎么办?Win7电脑不能复制粘贴是什么原因及解决方法...
- Dennis Gabor与全息摄影
- [附源码]Python计算机毕业设计高校社团管理系统Django(程序+LW)
- 计算机中的数据是一个广义的概念,广义数据结构
- 提高编程效率的5大VS Code插件
- G1CTF-2021 WP
- UG NX 12 同步建模:拉出面
热门文章
- 其实,我们需要的并不多
- ROBOMASTER 2018机甲大师赛 南部赛区三等奖!
- 2019中韩版权研讨会举行 网络成版权保护主战场
- 用vim 配置javascript
- [arm 驱动]Linux输入子系统分析
- 毁掉云计算项目的三个“好办法”
- 记一次使用 android 自带 WebView 做富文本编辑器之API、机型的兼容及各种奇葩bug的解决...
- Altiris 7.1 安装
- 跨语言平台的RSA加密、解密、签名、验证算法的实现
- NYOJ 5177 疯牛(最大化最小值 二分搜索)