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

2021-04-08 13:19:31 字數 1316 閱讀 6903

1.9 構造任意值

py_buildvalue()函式和pyarg_parsetuple()相同,宣告如下:

pyobject *py_buildvalue(char *format, ...);

py_buildvalue()函式和pyarg_parsetuple()函式類似,識別一系列格式化單元,但引數(作為輸入引數,而不是輸出引數)必須不能是指標,而是值。函式返回乙個python物件,適合作為從python呼叫的c函式的返回值。

和pyarg_parsetuple()函式的乙個不同是:pyarg_parsetuple() 要求第乙個引數必須是元組型別(由於python引數列表在內部總是以元組實現),函式py_buildvalue()不總是構造乙個元組,只有當它的格式化字串包含兩個以上格式化單元時才構造乙個元組。如果格式化字串為空,它返回none;如果格式化字串恰好包含乙個格式化單元,函式返回由格式化單元所描述的任何物件。將格式化字串一能夠括號括起來,可以強制返回乙個長度為0或1的元組。

例子(左邊是呼叫,右邊是python值):

py_buildvalue("") none

py_buildvalue("i", 123) 123

py_buildvalue("iii", 123, 456, 789) (123, 456, 789)

py_buildvalue("s", "hello") 'hello'

py_buildvalue("ss", "hello", "world") ('hello', 'world')

py_buildvalue("s#", "hello", 4) 'hell'

py_buildvalue("()") ()

py_buildvalue("(i)", 123) (123,)

py_buildvalue("(ii)", 123, 456) (123, 456)

py_buildvalue("(i,i)", 123, 456) (123, 456)

py_buildvalue("[i,i]", 123, 456) [123, 456]

py_buildvalue("",

"abc", 123, "def", 456)

py_buildvalue("((ii)(ii)) (ii)",

1, 2, 3, 4, 5, 6) (((1, 2), (3, 4)), (5, 6))

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

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

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

1.3 回到例子 回到我們的例子函式中,現在,你應該能夠理解下面這些語句 if pyarg parsetuple args,s command return null 根據是否由 pyarg parsetuple 函式設定了異常,如果在引數列表中檢測到錯誤 異常被設定 則函式返回 null 函式返回...

python擴充套件和嵌入

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