用C或C++為Python編寫模塊


1、使用c或c++編寫對應的函數例如:

1 //modtest.c
2 int abs(int number){
3     if(number<0){
4         return -number;
5     }
6     else{
7         return number;
8     }
9 }        

2、編寫每個函數對應的包裝函數:

1 static PyObject *modtest_abs(PyObject *self,Pyobject *args){
2     int num; //定義參數類型
3     if(!PyArg_ParseTuple(args,"i",&num)){     
4         //"i"表示數據類型 這里進行參數傳遞類型檢查
5         return NULL;
6     }
7     return (Pyobject*)Py_BulidValue("i",abs(num));
8     //"i"返回值類型,第二個參數為c/c++函數的調用后的返回值
9 }    

3、編寫每個模塊的PyMethodDef MoudleMethod數組:

1 static PyMethodDef modtestMethods[] = {
2     {"abs",modtest_abs,METH_VARARGS},
3     {...},//幾個函數就有幾個數組項,當然最后還有一個空項
4     {NULL,NULL}
5 };

4、編寫模塊初始化函數:

1 void initmodtest(){
2     Py_InitMoudle("modtest","modtestMethods");
3 }

5、編譯:
創建setup文件:

1 #!/usr/bin/env python
2 from distutils.core import setup,Extension
3 Mod = "modtest"
4 setup(name=MOD, ext_modules=[Extension(MOD, sources=['modtest.c'])])
5 
6 #python setup.py build

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM