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("{s:i,s:i}", "abc", 123, "def", 456) {'abc': 123, 'def': 456} Py_BuildValue("((ii)(ii)) (ii)", 1, 2, 3, 4, 5, 6) (((1, 2), (3, 4)), (5, 6))