《擴展和嵌入python解釋器》1.9 構造任意值

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("{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))
 
發佈了11 篇原創文章 · 獲贊 6 · 訪問量 24萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章