Al almacenar un bool en memcache a través de python-memcached me di cuenta de que se devuelve como un número entero. Revisando el código de la biblioteca me mostró que hay un lugar donde isinstance(val, int) se comprueba a la bandera el valor como un número entero.

Lo he probado en el interprete de python y he notado lo siguiente:

>>> isinstance(True, int)
True
>>> issubclass(bool, int)
True

Pero qué es exactamente bool una subclase de int?

Que tiene algo de sentido porque un valor booleano que básicamente es un int que sólo puede tomar dos valores, pero se necesita mucho menos operaciones/espacio de un real entero (no aritmética, solamente un poco de espacio de almacenamiento)….

Aquí la Alex Martelli a tomar en una pregunta relacionada con la.
Vale la pena señalar que, dado que en Python todo es un objeto, con la sobrecarga que emplea, es bastante inútil para tratar de ahorrar espacio, haciendo bools más pequeños. Si usted se preocupaba por el uso de la memoria, que se estaría utilizando un lenguaje diferente, para empezar.

OriginalEl autor ThiefMaster | 2011-11-17

3 Comentarios

  1. 86

    De un comentario en http://www.peterbe.com/plog/bool-is-int

    Es perfectamente lógico, si usted está cerca cuando el tipo bool fue
    añadido a python (en algún momento alrededor de 2.2 o 2.3).

    Antes de la introducción de un tipo bool, 0 y 1 fueron las
    la representación oficial de la verdad, valor, similar a C89. Para evitar
    innecesariamente romper no ideal pero el código de trabajo, el nuevo tipo bool
    se necesita para trabajar como 0 y 1. Esto va más allá del mero valor de verdad,
    pero todas integral de las operaciones. Nadie se recomienda el uso de un booleano
    resultado en un contexto numérico, ni la mayoría de la gente recomienda probar
    la igualdad para determinar el valor de verdad, nadie quería averiguar el duro
    forma de cuánto código existente es de esa manera. Por lo tanto la decisión de hacer
    Verdaderas y Falsas máscaras como 1 y 0, respectivamente. Esto es meramente un
    artefacto histórico de la evolución lingüística.

    De crédito va a dman13 por esta buena explicación.

    Sorprendentemente, esta es mi respuesta más votada en StackExchange, para mí a pesar de nunca haber escrito una línea de Python en mi vida!
    (no es cierto – Python es divertido!)
    Tenga en cuenta que esto podría ser verdad históricamente, pero idiomáticamente usted ve un montón de sum([f(value) for value in values]) donde f(x) es algún tipo de función de filtro y necesita ver cómo muchos de los valores que pasar el filtro.
    Personalmente prefiero escribir sum(1 for value in values if f(value)), pero la verdad es que he visto respetados abogar en favor de las cifras de las operaciones en bools.

    OriginalEl autor Polynomial

  2. 24

    Ver PEP 285 — la Adición de un tipo bool. Relevante del pasaje:

    6) bool heredar de int?

    => Sí.

    En un mundo ideal, bool podría ser mejor implementado como un
    independiente de tipo entero que sabe cómo llevar a cabo de modo mixto
    la aritmética. Sin embargo, la herencia de int bool facilita la
    aplicación enormemente (en parte, ya que todo el código C que se llama
    PyInt_Check() seguirá trabajando — devuelve true para
    subclases de int).

    OriginalEl autor Steven Rumbalski

  3. 0

    También puede utilizar help para comprobar la Bool‘valor de s en la Consola:

    ayuda(True)

    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

    OriginalEl autor aircraft

Dejar respuesta

Please enter your comment!
Please enter your name here