true operador inicializar funcion ejemplo declarar booleanos bool python boolean

python - operador - ¿Por qué bool es una subclase de int?



operador xor python (3)

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

Es perfectamente lógico, si estuvieras cerca cuando el tipo de bool se agregó a Python (en algún momento alrededor de 2.2 o 2.3).

Antes de la introducción de un tipo de bool real, 0 y 1 eran la representación oficial del valor de verdad, similar a C89. Para evitar romper innecesariamente código no ideal pero funcional, el nuevo tipo bool necesitaba funcionar igual que 0 y 1. Esto va más allá del mero valor de verdad, pero todas las operaciones integrales. Nadie recomendaría usar un resultado booleano en un contexto numérico, y la mayoría de las personas no recomendaría probar la igualdad para determinar el valor de verdad, nadie quería descubrir de manera difícil cuánto código existe de esa manera. Por lo tanto, la decisión de hacer True y False se enmascara como 1 y 0, respectivamente. Esto es simplemente un artefacto histórico de la evolución lingüística.

El crédito va a dman13 por esta agradable explicación.

Al almacenar un bool en memcached a través de python-memcached noté que se devolvió como un entero. Verificar el código de la biblioteca me mostró que hay un lugar donde isinstance(val, int) se isinstance(val, int) para marcar el valor como un 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é exactamente bool es una subclase de int ?

Tiene sentido porque un booleano es básicamente un int que solo puede tomar dos valores pero necesita mucho menos operaciones / espacio que un entero real (sin aritmética, solo un bit de espacio de almacenamiento) ....


También puede usar la help para verificar el valor de Bool 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


Ver PEP 285 - Agregar un tipo bool . Paso relevante:

6) ¿Debería bool heredar de int?

=> Sí.

En un mundo ideal, bool podría implementarse mejor como un tipo de entero separado que sabe cómo realizar aritmética de modo mixto. Sin embargo, heredar bool de int facilita enormemente la implementación (en parte debido a que todo el código C que llama a PyInt_Check () continuará funcionando, esto devuelve true para las subclases de int).