使用C或C 擴充套件python

2021-08-16 09:31:57 字數 1027 閱讀 7416

在python中,如果需要實現一些新的函式,型別物件及方法,可以通過c/c++實現新的模組實現。

乙個簡單的例子

如果要實現乙個module叫spam,希望實現乙個方法函式system,呼叫的是c的庫函式system()

import spam

status = spam.system("ls -l")

首先建立乙個c檔案spammodule.c ,該檔案包含這個模組的c實現**,首先第一行:

#include
該標頭檔案包含大部分python run-time的函式,巨集定義和變數。該標頭檔案必須第乙個包含。

後面需要實現spam.system的具體實現**

static pyobject *

spam_system(pyobject *self, pyobject *args)

self指向乙個當前的物件實體,args是乙個python元組的指標。

pyarg_parsetuple()檢查引數型別並將其從python的型別轉為c**的值。

pylong_fromlong將整數返回為python的整數物件。

在實現該方法的函式後,需要制定這個模組的方法表和初始化函式

static pymethoddef spammethods = ,

.../* sentinel */

};

static struct pymoduledef spammodule = ;
這個模組必須在初始化函式中進行建立。初始化函式必須以pyinit_name()命名。

pymodinit_func

pyinit_spam(void)

完成上述步驟後,如果是作為乙個永久的模組,只需要將本檔案放入到modules/目錄下,在modules/setup.local新增下行

spam spammoudle.o

使用c語言擴充套件python

背景 我們工作中可能有時需要和第三方對接,而第三方提供的sdk可能是c語言或者c 編寫的,而我們程式使用的語言是python,這時候就需要使用python呼叫c庫 參考官方文件 編寫python擴充套件分三步 第一步 建立應用 使用c語言編寫具體的功能 如果sdk已經提供了並且不需要我們整合,則跳過...

c 擴充套件python

include int fact int n pyobject warp fact pyobject self,pyobject args result fact n return py buildvalue i result static pymethoddef examplemethods ex...

使用C語言擴充套件Python 四

首先,遵循 測試先行 的原則,先來看我們改造後的python這一端,你可以每次讀取音訊原始檔的乙個資料塊,將其轉遞給encoder物件的encode方法,這樣無論你的原始檔是何種格式,你都可以在encoder中進行自由的控制,示例 如下 import clame inbufsize 4096 if ...