Al almacenar un bool en memcached a través de python-memcached, noté que se devuelve como un número entero. Verificar el código de la biblioteca me mostró que hay un lugar donde isinstance(val, int)
se marca para marcar el valor como un número entero.
Así que lo probé en el shell de Python y noté lo siguiente:
>>> isinstance(True, int)
True
>>> issubclass(bool, int)
True
Pero, ¿por qué es exactamente bool
una subclase de int
?
Tiene sentido porque un booleano básicamente es un int que solo puede tomar dos valores, pero necesita muchas menos operaciones / espacio que un entero real (sin aritmética, solo un bit de espacio de almacenamiento) ...
bool
s sea más pequeño. Si le importara el uso de la memoria, para empezar estaría usando un idioma diferente.Respuestas:
De un comentario en http://www.peterbe.com/plog/bool-is-int
El crédito es para dman13 por esta bonita explicación.
fuente
sum([f(value) for value in values])
dóndef(x)
hay algún tipo de función de filtro y necesita ver cuántos valores pasan el filtro.sum(1 for value in values if f(value))
, pero en realidad he visto a gente respetada abogar por las operaciones numéricas en bools.Consulte PEP 285 - Adición de un tipo bool . Pasaje relevante:
fuente
También se puede usar
help
para verificar elBool
valor de 'en la consola:ayuda (verdadero)
help(True) Help on bool object: class bool(int) | bool(x) -> bool | | Returns True when the argument x is true, False otherwise. | The builtins True and False are the only two instances of the class bool. | The class bool is a subclass of the class int, and cannot be subclassed. | | Method resolution order: | bool | int | object |
ayuda (falso)
help(False) Help on bool object: class bool(int) | bool(x) -> bool | | Returns True when the argument x is true, False otherwise. | The builtins True and False are the only two instances of the class bool. | The class bool is a subclass of the class int, and cannot be subclassed. | | Method resolution order: | bool | int | object
fuente