Questo è un semplice esempio dalla documentazione python (http://docs.python.org/extending/extending.html):Qual è il modo "corretto" per passare un booleano ad un'estensione 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);
}
Se voglio passare un parametro booleano aggiuntivo per la funzione - che cosa è il modo "corretto" di farlo?
Non sembra esserci un'opzione bool da passare a PyArg_ParseTuple(). Così ho pensato di quanto segue:
- leggere un intero e basta usare il valore (come bool è una sottoclasse di int)
- chiamata PyBool_FromLong() su un intero
- lettura e l'oggetto e chiamare PyBool_Check () per verificare che si tratti di un bool
- forse c'è un modo per ottenere qualsiasi tipo di variabile e ottenere il suo valore di verità (cioè una matrice vuota sarà falsa ecc.) che è ciò che di solito fa la funzione python.
Uno di questi preferibile? Altre opzioni?
Sto usando questo e ho scoperto che in C devo dichiarare variabili come 'int' (non' bool'). Oppure, quando si usano più bool, non verranno impostati correttamente (probabilmente un problema con la differenza di dimensioni tra un 'bool' e un' int'). – szmoore
@szmoore Si afferma che utilizza un numero intero nella risposta qui. – kevr
Sì, ma spesso in C puoi usare 'int' e' bool' in modo intercambiabile, in questo caso non puoi. Posso rimuovere il mio commento se è superfluo. – szmoore