PyQuiz 34 – Short-circuit con or en Python

El reto
x = 0
resultado = x or 'vacío'
print(resultado)¿Cuál es el resultado?
- a) 'vacío'
- b) 0
- c) True
Piensa tu respuesta antes de seguir leyendo…
Concepto: Short-circuit con or
En Python, el operador or no devuelve simplemente True o False: devuelve el primer valor que sea «truthy», o el último valor si todos son «falsy». A esto se le llama evaluación en cortocircuito (short-circuit evaluation).
Los valores falsy en Python son: 0, 0.0, '' (string vacío), [], {}, None, y False. Todo lo demás es truthy. Cuando Python evalúa x or y, si x es truthy lo devuelve directamente sin evaluar y. Si x es falsy, devuelve y (sea cual sea su valor).
print(0 or 'vacío') # 'vacío' — 0 es falsy
print('' or 'default') # 'default' — string vacío es falsy
print(5 or 99) # 5 — 5 es truthy, devuelve el primero
print(None or [] or 42) # 42 — los dos primeros son falsyPaso a paso
x = 0— Se asigna el valor0ax. El entero0es un valor falsy en Python.resultado = x or 'vacío'— Python evalúaxprimero. Comoxes0(falsy), el operadororno puede «cortocircuitar» aquí, así que evalúa el lado derecho.- El lado derecho es
'vacío', un string no vacío, por lo tanto truthy. El operadorordevuelve este valor:'vacío'. print(resultado)— Se imprime'vacío'.
📥 Llévate el cheatsheet de Python (gratis)
PDF de 6 páginas con lo esencial: tipos, condicionales, bucles, estructuras de datos, funciones y los errores que más vas a cometer. Para tener al lado mientras programas.
Sin spam. Te apuntas a la lista, descargas el cheatsheet y recibes contenido de Python cada semana.
Solución
Respuesta correcta: A) 'vacío'
'or' retorna el primer valor truthy. Como 0 es falsy, retorna 'vacío'.
Sabías que…
El operador and funciona de forma complementaria: devuelve el primer valor falsy, o el último si todos son truthy. Juntos permiten patrones muy expresivos:
# Patrón clásico: valor por defecto
nombre = entrada_usuario or 'Anónimo'
# and devuelve el primer falsy o el último truthy
print(5 and 10) # 10 — ambos truthy, devuelve el último
print(0 and 10) # 0 — 0 es falsy, cortocircuita
print(5 and 0) # 0 — llega al segundo que es falsy
# Equivalente moderno con walrus operator (Python 3.8+):
if valor := datos.get('clave'):
procesar(valor)Prueba tú mismo
¿Qué devuelve [] or {} or 'hola' or 42? Razona paso a paso qué evalúa Python en cada or.
Más PyQuizzes en elpythonista.com/pyquizzes
Tutorial relacionado: Operadores y expresiones
¿Quieres aprender Python en orden, no a saltos?
Esto que has leído es solo una pieza. En El Pythonista lo verás todo encadenado: 11 módulos, 37+ horas de vídeo, 734 actividades y un proyecto real (MovieTracker) que crece contigo desde la primera variable hasta el deploy a producción.
37+ horas · 734 actividades · Proyecto real · Acceso de por vida · 14 días de garantía
