《扩展和嵌入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万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章