2009-04-24 4 views
2

J'essaye d'écrire une fonction pour retourner la valeur de vérité d'un PyObject donné. Cette fonction devrait renvoyer la même valeur que le test de vérité if() - les listes vides et les chaînes sont False, etc. J'ai regardé les en-têtes python/include, mais je n'ai rien trouvé qui semble le faire. Le plus proche que je suis venu était PyObject_RichCompare() avec True comme deuxième valeur, mais qui renvoie False pour "1" == True par exemple. Existe-t-il une fonction pratique pour cela, ou dois-je tester par rapport à une séquence de types et faire des tests spéciaux pour chaque type possible? Que fait l'implémentation interne de if()?Intégration Python - comment obtenir le comportement du test de vérité if() à partir de C/C++?

Répondre

5

est-ce pas elle, en object.h:

PyAPI_FUNC(int) PyObject_IsTrue(PyObject *); 

?

+0

Oui, il est. Merci d'avoir répondu! (Je remplissais les en-têtes de "bool" et "Bool" et "Compare" et "Test" et ne trouvais rien) En fait, je l'ai trouvé aussi, en obtenant la source, grepping par l'analyseur jusqu'à ce que j'ai JUMP_IF_TRUE, alors En parcourant ceval.c jusqu'à JUMP_IF_TRUE, j'ai vu qu'il utilisait PyObject_IsTrue. Peut-être que je vais juste utiliser le code source, plutôt que la documentation à partir de maintenant :-) –

+0

Le code source est la réponse définitive à la plupart des questions. 8-) Et le code source Python est très facile à comprendre - il est étonnamment auto-cohérent et prévisible pour une base de code avec de nombreux auteurs. Quand j'ai lu votre question, j'ai pensé "Je parie que la fonction s'appelle IsTrue", et bien sûr que c'était le cas. – RichieHindle

1

Utilisez

int PyObject_IsTrue(PyObject *o)
Retourne 1 si l'objet o est considéré comme vrai, et 0 sinon. Ceci est équivalent à l'expression Python non pas o. En cas d'échec, renvoie -1.

(de Python/C API Reference Manual)