2009-09-22 11 views
21

Szukałem w kodzie źródłowym do hasattr wbudowanej funkcji i zauważyłem kilka linii, które wzbudził moje zainteresowanie:Dlaczego Python utrzymuje liczbę odwołań w False i True?

Py_INCREF(Py_False); 
return Py_False; 

... 

Py_INCREF(Py_True); 
return Py_True; 

Czy nie Py_False i Py_True wartości globalnych? Czy tylko z czystej ciekawości, dlaczego Python zachowuje liczbę referencyjną dla tych zmiennych?

+0

-1: Jak to rozwiązuje każdy problem programistyczny, który obecnie masz? –

+9

@ S.Lott od kiedy pytania tutaj odnoszą się do konkretnych konkretnych problemów programistycznych. – Triptych

+17

Obecnie mam problem, że nie rozumiem potrzeby zwiększania liczników odwołań w Py_True i Py_False. –

Odpowiedz

21

Ma to na celu ujednolicenie obsługi wszystkich obiektów. Jeśli piszę kod C, który obsługuje wartość zwracaną z funkcji, muszę zwiększyć i zmniejszyć licznik odwołań do tego obiektu. Jeśli funkcja zwraca mi wartość True, nie chcę sprawdzać, czy jest to jeden z tych obiektów specjalnych, aby wiedzieć, czy manipulować liczbą referencyjną. Potrafię traktować wszystkie obiekty w identyczny sposób.

Traktując True i False (i None, btw) tak samo jak wszystkie inne obiekty, kod C jest znacznie prostszy w całym tekście.

+0

Dodatkowo: T F i None są w rzeczywistości obiektami. Po prostu nie mają żadnych metod. http://docs.python.org/c-api/bool.html – Pod

+1

technicznie mają metody. Każdy obiekt ma metody. – ironfroggy

+4

len (dir (prawda)) to 54 - klin * pełne * metod. Są to po prostu wszystkie specjalne (nazwane podwójnie podkreśleniami). –

Powiązane problemy