2009-09-22 7 views
21

Ich war an dem Quellcode der hasattr eingebauten Funktion suchen und ein paar Zeilen bemerkt, dass mein Interesse geweckt:Warum behält Python eine Referenzzählung auf False und True?

Py_INCREF(Py_False); 
return Py_False; 

... 

Py_INCREF(Py_True); 
return Py_True; 

globaler Werte nicht Py_False und Py_True? Aus reiner Neugier, warum hält Python eine Referenzzahl für diese Variablen?

+0

-1: Wie löst dies ein Programmierproblem, das Sie derzeit haben? –

+9

@ S.Lott seit wann sich hier Fragen auf bestimmte konkrete Programmierprobleme beziehen müssen. – Triptych

+17

Ich habe derzeit das Problem, dass ich nicht verstehe, die Referenzzählungen auf Py_True und Py_False zu erhöhen. –

Antwort

21

Es ist, um alle Objekthandhabung einheitlich zu machen. Wenn ich C-Code schreibe, der einen Rückgabewert von einer Funktion behandelt, muss ich die Referenzzählung für dieses Objekt inkrementieren und dekrementieren. Wenn die Funktion True zurückgibt, möchte ich nicht überprüfen müssen, ob es eines dieser speziellen Objekte ist, um zu wissen, ob es seine Referenzzählung manipulieren soll. Ich kann alle Objekte gleich behandeln.

Durch die Behandlung von True und False (und None, BTW) das gleiche wie alle anderen Objekte, ist der C-Code durchgängig viel einfacher.

+0

Zusätzlich: T F und None sind eigentlich Objekte. Sie haben einfach keine Methoden. http://docs.python.org/c-api/bool.html – Pod

+1

sie haben technisch Methoden. Jedes Objekt hat Methoden. – ironfroggy

+4

len (dir (True)) ist 54 - chock * full * Methoden. Sie sind alle nur spezielle (Doppel-Unterstriche-benannt). –