python擴充套件模組開發

2021-08-10 20:24:01 字數 3623 閱讀 7325

python.h檔案:此檔案是python c api的入口檔案,所有api都包含在此檔案裡面

py_和_py:python c api的方法與變數字首,在**中盡量不要使用此字首,避免混亂

pyobject:python物件,包含引用計數與物件指標,所以的輸入輸出都通過此物件

bool:布林型別,c是沒有bool型別的,python c api的bool型別定義在asdl.h中,形式如下:typedef enum bool;,即false=0,true=1

windows環境編譯:需要將python27.lib改為python27_d.lib,並且要注意編譯的位數,如果編譯的是32位,那鏈結的必須是python32位的庫。編譯後的lib庫,如果要使用,需要將.lib字尾修改為.pyd。另外如果要在其它機器上使用此pyd庫,需要注意依賴的lib是否都存在,否則會報「找不到指定的模組」

介面描述列表:列表最後乙個元素必須是結尾

模組初始化:初始化函式定義格式如下:pymodinit_func init,例如pymodinit_func inittest(void)

#include 

#ifdef win32

// 注意:如果是在windows上開發,需要將python27.lib改為python27_d.lib

#pragma comment(lib,"python27_d.lib")

#endif

//測試函式

static pyobject *test(pyobject *self, pyobject *args)

//介面說明列表

static pymethoddef apimethods = ,

// 注意:介面列表最後需要以結尾

};// 初始化模組,注意:init後面需要跟模組名稱一樣

pymodinit_func inittest(void)

#include 

#ifdef win32

#pragma comment(lib,"python27_d.lib")

#endif

bool isprimenumber(unsigned

long x)

//如果x能被[2 (x-1)]的整數整除,那麼表示x是合數,並不是質數

for (unsigned

long i = 2; i < x; i++)

}//如果無法被[2 (x-1)]的整數整除,那麼x就是質數

return

true;

}static pyobject *isprimenumber(pyobject *self, pyobject *args)

// 如果是質數返回0,不是或錯誤返回-1

if (isprimenumber((unsigned

long)number))

return py_buildvalue("i", -1);

}// 介面說明列表

static pymethoddef apimethods = ,

};// 關聯介面列表

pymodinit_func initisprimenumber(void)

// 通過vs2015編譯(32位應用程式),使用python2.7 32位版本執行成功,結果如下

// 記得處理winodws編譯注意事項

/*python 2.7.9 on win32

>>> import isprimenumber

>>> print isprimenumber.isprimenumber(3)

0>>> print isprimenumber.isprimenumber(4)

-1>>>

*/// 通過g++編譯,使用python2.6庫,但2.7也可以使用

// 編譯命令如下:g++ -o isprimenumber.so -i /usr/include/python2.6 isprimenumber.cpp -fpic -shared

// -i用於指定python.h的路徑

/*python 2.7.9

[gcc 4.4.7 20120313] on linux2

>>> import isprimenumber

>>> print isprimenumber.isprimenumber(3)

0>>> print isprimenumber.isprimenumber(4)

-1>>>

*/

#include #ifdef win32

#pragma comment(lib,"python27_d.lib")

#endif

static pyobject *testlistordict(pyobject *self, pyobject *args)

// 建立列表,字典

pyobject *pylist = null; //python列表

pyobject *pydict = null; //python字典

pylist = pylist_new(1);

if (null == pylist)

pydict = pydict_new();

if (null == pydict)

// 加入資料到字典

pydict_setitemstring(pydict, "number", py_buildvalue("i", number));

// 加入資料到列表

pylist_setitem(pylist, 0, pydict);

return pylist;

}// 介面說明列表

static pymethoddef apimethods = ,

};// 關聯介面列表

pymodinit_func inittestlistordict(void)

// vs2015編譯執行

/*python 2.7

.9 on win32

or"license"

for more information.

>>> import testlistordict

>>> print testlistordict.testlistordict(3)

>>>

*/// g++編譯執行,使用python2.6庫,但2.7也可以使用

// 編譯命令:g++ -o testlistordict.so -i /usr/include/python2.6 testlistordict.cpp -fpic -shared

/*python 2.7

.9[gcc 4.4

.720120313] on linux2

or"license"

for more information.

>>> import testlistordict

>>> print testlistordict.testlistordict(3)

>>>

*/

python擴充套件模組 Cython

python 可以直接呼叫c模組。這些c模組可以是通用的c庫或專門為python工作的庫。cython生成第二種型別的模組 與python內部對話的c庫,可以與現有的python 繫結在一起。通過使用cython可以加速python程式。cython檔案字尾為 pyx 作為新手,我是通過anacon...

NodeJS開發c 擴充套件模組

建立測試模組 facerecognition.cpp include using v8 functioncallbackinfo using v8 isolate using v8 local using v8 object using v8 string using v8 value void c...

python及拓展版 python擴充套件模組

一 擴充套件模組 影像擴充套件模組 pil 單獨安裝 影像擴充套件模組需 安裝pil v1.16 與python 版本對應 安裝完畢後呼叫方式為 import image 注意首字母大寫!注意路徑字串的處理 row,col im.size 獲取影像的尺寸 聲音引擎 pytts 擴充套件模組 單獨安裝...