6 · Booleanos: truthy, falsy y cortocircuito
Qué evalúa a False en Python — y por qué `and`/`or` devuelven valores, no solo True/False.
`and`/`or` devuelven uno de sus operandos, no necesariamente `True` o `False` — esa es la regla del cortocircuito.
Sin esto:
Sin entender truthy/falsy, un guard como `if weights:` pasa silenciosamente cuando `weights` es una lista vacía `[]` — tu modelo entrena con nada.
El tipo bool de Python tiene exactamente dos valores: True y False. Pero muchos otros valores se comportan como booleanos en un condicional — son truthy (se tratan como True) o falsy (se tratan como False). Conocer el conjunto de falsy de memoria ahorra horas de debugging.
Python (in browser)
Memoriza el conjunto falsy: entero cero, float cero, string vacío, colecciones vacías, None y False mismo.
Python runs entirely in your browser via Pyodide (~6 MB on first Run, cached after).
and y or son operadores de cortocircuito — dejan de evaluar en cuanto el resultado está determinado, y devuelven el operando que decidió el resultado, no un booleano.
Python (in browser)
La evaluación en cortocircuito no es solo una optimización — en Python se usa idiomáticamente para evitar operaciones costosas o que lanzan excepciones.
Python runs entirely in your browser via Pyodide (~6 MB on first Run, cached after).
Python (in browser)
`id()` devuelve la dirección de memoria. Dos listas iguales se almacenan en direcciones distintas — `is` compara la dirección, `==` compara el contenido.
Python runs entirely in your browser via Pyodide (~6 MB on first Run, cached after).
¿Qué devuelve `bool([])` y qué devuelve `[] == []`?
- El conjunto falsy: `0`, `0.0`, `""`, `[]`, `{}`, `set()`, `None`, `False`. Todo lo demás es truthy.
- `and`/`or` devuelven un operando, no siempre `True`/`False`. `x or default` es el patrón idiomático para valores de respaldo.
- `is` comprueba identidad (mismo objeto en memoria); `==` comprueba igualdad (mismo valor). Solo usa `is` para `None`, `True`, `False`.
Las máscaras booleanas de NumPy y Pandas siguen la misma semántica truthy — `if df[mask]:` lanza un error porque una Serie booleana no es un escalar. Guards como `if model is not None:` antes de llamar `.predict()` usan la regla de identidad correctamente. El cortocircuito `config.get('dropout') or 0.0` es estándar para hiperparámetros opcionales.
Si lo quitas: Usar `==` para comparar con `None` pasa el linter pero falla con arrays de numpy (donde `array == None` devuelve un array, no un bool escalar), causando el críptico `ValueError: The truth value of an array is ambiguous`.