2009-09-22 2 views
21

Je regardais le code source à la hasattr fonction intégrée et remarqué quelques lignes qui a piqué mon intérêt:Pourquoi Python garde-t-il un compte de référence sur Faux et Vrai?

Py_INCREF(Py_False); 
return Py_False; 

... 

Py_INCREF(Py_True); 
return Py_True; 

Ne sont pas Py_False et Py_True valeurs globales? Juste par pure curiosité, pourquoi Python garde-t-il un nombre de références pour ces variables?

+0

-1: Comment cela résout-il un problème de programmation que vous avez actuellement? –

+9

@ S.Lott depuis quand aux questions ici doivent se rapporter à des problèmes de programmation concrets particuliers. – Triptych

+17

J'ai actuellement le problème que je ne comprends pas le besoin d'incrémenter les comptes de référence sur Py_True et Py_False. –

Répondre

21

Cela permet d'uniformiser la gestion de tous les objets. Si j'écris du code C qui gère une valeur de retour d'une fonction, je dois incrémenter et décrémenter le compte de référence sur cet objet. Si la fonction me renvoie True, je ne veux pas avoir à vérifier si c'est un de ces objets spéciaux pour savoir s'il faut manipuler son compte de référence. Je peux traiter tous les objets de manière identique. En traitant True et False (et None, btw) de la même manière que tous les autres objets, le code C est beaucoup plus simple tout au long.

+0

De plus: T F et None sont en fait des objets. Ils n'ont tout simplement aucune méthode. http://docs.python.org/c-api/bool.html – Pod

+1

ils ont techniquement des méthodes. Chaque objet a des méthodes. – ironfroggy

+4

len (dir (True)) est 54 - caler * plein * de méthodes. Ils sont juste tous spéciaux (double-underscores-named). –

Questions connexes