日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

在python中嵌入c/c++

發布時間:2025/3/15 python 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 在python中嵌入c/c++ 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在python中嵌入c/c++

分類: c python 2897人閱讀 評論(0) 收藏 舉報 pythoncompilergccnullc語言 ?? 學習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++的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。