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 來擴充套件...