2009-09-22 14 views
21

que estaba buscando en el código fuente de la función incorporada hasattr y se dio cuenta de un par de líneas que despertó mi interés:¿Por qué Python mantiene un recuento de referencias en falso y verdadero?

Py_INCREF(Py_False); 
return Py_False; 

... 

Py_INCREF(Py_True); 
return Py_True; 

¿No son Py_False y Py_True valores globales? Solo por pura curiosidad, ¿por qué Python mantiene un recuento de referencia para estas variables?

+0

-1: ¿Cómo soluciona esto cualquier problema de programación que tenga actualmente? –

+9

@ S.Lott desde cuando las preguntas aquí tienen que estar relacionadas con problemas específicos de programación concreta. – Triptych

+17

Actualmente tengo el problema de que no entiendo la necesidad de incrementar los recuentos de referencia en Py_True y Py_False. –

Respuesta

21

Es para uniformizar el manejo de todos los objetos. Si estoy escribiendo código C que maneja un valor de retorno de una función, tengo que incrementar y disminuir el recuento de referencias en ese objeto. Si la función me devuelve verdadero, no quiero tener que comprobar si es uno de esos objetos especiales para saber si manipular su cuenta de referencia. Puedo tratar todos los objetos de forma idéntica.

Al tratar True y False (y None, btw) al igual que todos los demás objetos, el código C es mucho más simple en todo.

+0

Además: T F y Ninguno son realmente objetos. Simplemente no tienen ningún método. http://docs.python.org/c-api/bool.html – Pod

+1

técnicamente tienen métodos. Cada objeto tiene métodos. – ironfroggy

+4

len (dir (Verdadero)) es 54 - chock * full * de métodos. Solo son todos especiales (con doble subrayado). –

Cuestiones relacionadas