《擴充套件和嵌入python直譯器》1 3 回到例子中

2021-04-08 11:18:42 字數 1066 閱讀 1431

1.3 回到例子

回到我們的例子函式中,現在,你應該能夠理解下面這些語句:

if (!pyarg_parsetuple(args, "s", &command))

return null;

根據是否由

pyarg_parsetuple()函式設定了異常,如果在引數列表中檢測到錯誤(異常被設定), 則函式返回

null(函式返回物件指標的錯誤標識)。否則,引數的字串值已經被拷貝到本地變數

command中了。這是乙個分配的指標,你不應修改指標指向的字串 (就象在標準c中,變數

command應該正確地宣告為"

const char *command ")。

下面的語句呼叫了unix函式system(),傳遞給函式我們從pyarg_parsetuple() 得到的字串

sts = system(command);

我們的

spam.system()

函式必須把

sts的值作為python物件返回。這可以通過

py_buildvalue()

函式實現, 此函式有點象

pyarg_parsetuple()

函式的反函式,這個函式帶乙個格式化字串和任意個c值,並且返回乙個python物件。

py_buildvalue()

函式的詳細資訊後面給出。

return py_buildvalue("i", sts);

void

),相應的python函式必須返回none。你應習慣這麼做(由py_return_none巨集實現):

py_incref(py_none);

return py_none;

py_none是python空物件的c名稱。這是乙個典型的python物件而不只是乙個

null 指標,正如我們已經看到的,在大多數情況下,py_none表示錯誤。

擴充套件和嵌入python直譯器 摘要

python是一種解釋型,物件導向的程式語言。本文描述如何使用c或c 編寫新模組來擴充套件python直譯器。擴充套件模組能夠定義新的函式也可以定義新的物件型別及其方法。本文也描述了如何將python直譯器作為一種擴充套件語言嵌入到另乙個應用程式中。最後,本文演示了如何編譯和連線擴充套件模組,使擴充...

《擴充套件和嵌入python直譯器》1 9 構造任意值

1.9 構造任意值 py buildvalue 函式和pyarg parsetuple 相同,宣告如下 pyobject py buildvalue char format,py buildvalue 函式和pyarg parsetuple 函式類似,識別一系列格式化單元,但引數 作為輸入引數,而不...

python擴充套件和嵌入

由於python說解釋性的指令碼語言,執行速度較慢。在某些需要提高指令碼執行效率的情況下,可以考慮擴充套件python,用c c 來完成對效率要求高的部分。另外,由於python功能強大,完全可以嵌入到c c 中,以簡化程式,減少 python提供了支援c c 介面,可以方便的使用c c 來擴充套件...