Este es un ejemplo sencillo de la documentación de Python (http://docs.python.org/extending/extending.html):¿Cuál es la forma "correcta" de pasar un valor booleano a una extensión Python C?
static PyObject *
spam_system(PyObject *self, PyObject *args)
{
const char *command;
int sts;
if (!PyArg_ParseTuple(args, "s", &command))
return NULL;
sts = system(command);
return Py_BuildValue("i", sts);
}
Si quiero pasar un parámetro booleano adicional a la función - lo que es la forma "correcta" de hacerlo?
No parece ser una opción para pasar a bool PyArg_ParseTuple(). Así que pensé en lo siguiente:
- leer un entero y sólo tiene que utilizar el valor (como bool es una subclase de int)
- PyBool_FromLong llamada() en un entero
- lectura y el objeto y llamar PyBool_Check () para verificar que es un bool
- tal vez hay una manera de conseguir cualquier tipo de variable y obtener su valor de verdad (es decir, una matriz vacía voluntad es Falsy etc.) que es lo que suele hacer la función de pitón.
¿Alguna de estas preferencias? ¿Otras opciones?
He estado usando esto y he encontrado que en C debo declarar las variables como 'int' (no' bool'). O, al usar múltiples bools, no se establecerán correctamente (posiblemente un problema con la diferencia de tamaños entre un 'bool' y un' int'). – szmoore
@szmoore Indica que aquí utiliza un número entero en la respuesta. – kevr
Sí, pero a menudo en C puede usar 'int' y' bool' de forma intercambiable, en este caso no puede. Puedo eliminar mi comentario si es superfloo. – szmoore