Esta función es la contrapartida de PyArg_ParseTuple(). Se declara así:
PyObject *Py_BuildValue(char *format, ...);
Reconoce un conjunto de unidades de formato similares a las reconocidas por PyArg_ParseTuple(), pero los argumentos (que son entradas a la función y no salidas) no deben ser punteros, sino simples valores. Devuelve un objeto Python nuevo, susceptible de ser devuelto por una función C invocada desde Python.
Una diferencia con PyArg_ParseTuple(): mientras ésta exige
que su primer argumento sea una tupla (ya que las listas de argumentos
en Python siempre se representan mediante tuplas internamente),
Py_BuildValue() no siempre construye una tupla. Sólo construye
una tupla si su cadena de formato contiene dos o más unidades. Si la cadena
de formato está vacía, devuelve None; si contiene exactamente una
unidad de formato, devuelve un objeto del tipo correspondiente a dicho formato.
Para forzar la construcción de una tupla, en los casos de cero o un elementos,
encerrar entre paréntesis la cadena de formato.
Cuando se pasan bloques de memoria como parámetros para proporcionar datos para formar los objetos, como en los formatos "s" y "s#", se copian los datos necesarios. Los objetos creados por Py_BuildValue() nunca hacen referencia a los bloques de memoria del usuario. En otras palabras, si el código de usuario llama a malloc() y pasa la memoria reservada a Py_BuildValue(), es el código del usuario el responsable de llamar a free() para liberar la memoria a la vuelta de Py_BuildValue().
En la siguiente descripción, la forma entrecomillada es la unidad de formato, la entrada entre paréntesis es el tipo de objeto Python que devolverá la unidad de formato y la entrada entre corchetes es el tipo de valor(es) C que hay que pasar.
Los caracteres espacio, tabulador, dos puntos y coma son ignorados en las cadenas de formato (pero no dentro de las unidades de formato como "s#"). Se puede utilizar este efecto para hacer que las cadenas de formato sean un poco más legibles.
None.
None, haciendo caso omiso
de la longitud.
None) [char *]
None) [char *, int]
None.
None, haciendo caso omiso
de la longitud.
Si hay un error en la cadena de formato, se activa la excepción PyExc_SystemError y se devuelve NULL.
Ejemplos (a la izquierda la llamada, a la derecha el valor de Python resultante):
Py_BuildValue("") None
Py_BuildValue("i", 123) 123
Py_BuildValue("iii", 123, 456, 789) (123, 456, 789)
Py_BuildValue("s", "hola") 'hola'
Py_BuildValue("ss", "hola", "mundo") ('hola', 'mundo')
Py_BuildValue("s#", "hola", 3) 'hol'
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))