¿Está garantizado que False == 0
y True == 1
, en Python? Por ejemplo, ¿está de alguna manera garantizado que el siguiente código siempre producirá los mismos resultados, cualquiera sea la versión de Python (tanto existente como, probablemente, futuros)?¿Es False == 0 y True == 1 en Python un detalle de implementación o está garantizado por el idioma?
0 == False # True
1 == True # True
['zero', 'one'][False] # is 'zero'
¡Cualquier referencia a la documentación oficial sería muy apreciada!
Editar: Como se señala en muchas respuestas, bool
hereda de int
. Por lo tanto, la pregunta puede ser reformulada como: "? ¿La documentación oficial dice que los programadores pueden confiar en booleanos que heredan de números enteros, con los valores 0
y 1
". ¡Esta pregunta es relevante para escribir código sólido que no fallará debido a los detalles de implementación!
Si sospecha que se trata de un detalle, ¿por qué no evitar los detalles? ¿Por qué hacer una pregunta como esta? Es trivial evitar depender de este tipo de funcionalidad. Para su ejemplo, use un diccionario en lugar de una lista. ¿Qué problema estás teniendo? ¿Por qué preguntar esto? –
@ S.Lott: hay muchas razones para hacer la pregunta anterior. Por lo tanto, hay casos en los que confiar en booleanos que son enteros simplifica el código: ¿tiene que cambiarlo? O bien, puede detectar lugares en un código escrito por otra persona que confía en que los booleanos son enteros: ¿interrumpe lo que está modificando en el código para "corregir" el código existente, o puede estar seguro de que la codificación actual es sonido? ? Hay una plétora de otros ejemplos. En términos más generales, es bueno conocer las reglas del juego, para que pueda jugarlo bien y programarlo de manera sensata. – EOL
@EOL: ¿me puede dar un ejemplo de "confiar en que booleanos siendo enteros simplifican su código"? No puedo imaginar tal cosa. "¿Interrumpes lo que estás modificando en el código para" arreglar "el código existente, o puedes estar seguro de que la codificación actual es sólida?" La pregunta parece técnica, no "¿cómo puedo enfrentarlo?" Las reglas son simples: ** no depende de los detalles de implementación **. Entonces, ¿por qué preguntar acerca de un detalle de implementación? –