Aprende leyendo en orden

El operador morsa := para asignar y comprobar en una línea

Aprende el operador morsa := de Python 3.8 para asignar y comprobar un valor en una sola línea.

El operador morsa := se introdujo en Python 3.8 para dejarte asignar y comprobar en una línea. La forma := se parece a los colmillos de una morsa — de ahí el nombre. Reduce el código repetitivo cuando el mismo valor se reutiliza dentro de una condición if o while.

Lo básico del operador morsa

El = normal es una instrucción y no puede aparecer dentro de expresiones — por eso no puedes ponerlo en la condición de if o while. := es una expresión, así que puede ir directamente dentro de una condición.

Con variable := expresión, asignas el resultado a la variable y usas ese mismo valor como el valor de la condición.

Asignación normal vs. el operador morsa
n = len(cart)if (n := len(cart))if n >= 3:evaluar >= 3ejecutar cuerpoejecutar cuerpoTrueasignar + leerTrue

La columna izquierda (normal) escribe la asignación y la comprobación en líneas separadas. La columna derecha (morsa) asigna y comprueba en una sola condición.

# Estilo normal (dos líneas)
cart = ["manzana", "pan", "leche", "huevos"]
n = len(cart)
if n >= 3:
    print(f"{n} artículos: envío gratis")

# Versión con morsa (una línea: asignar + comprobar)
if (n := len(cart)) >= 3:
    print(f"{n} artículos: envío gratis")
# Salida: 4 artículos: envío gratis

Envuélvelo entre paréntesis dentro de una condición

if n := len(cart) >= 3: sin paréntesis evalúa primero len(cart) >= 3 y asigna True/False a n. La forma idiomática es (n := len(cart)) >= 3 — envuelve la asignación entre paréntesis.

Usar el operador morsa con if

Un patrón común en if es necesitar también el valor comprobado dentro del cuerpo. Normalmente divides «asignar y luego comprobar» en dos líneas, pero el operador morsa te permite escribirlo una vez, justo donde se necesita el valor.

# Ramifica según el número de resultados de búsqueda y úsalo en el cuerpo
search_results = ["Libro A", "Libro B", "Libro C", "Libro D", "Libro E"]

if (hit_count := len(search_results)) >= 3:
    print(f"{hit_count} resultados encontrados")
else:
    print("Muy pocos resultados")
# Salida: 5 resultados encontrados

Usa el operador morsa para comprobar el total de un carrito de compras.

① Define cart_prices = [1200, 800, 3500, 600] (el precio de cada artículo).

② Dentro de la condición if, escribe (total := sum(cart_prices)) >= 5000. Cuando el total sea 5000 o más, imprime "{total} pesos: envío gratis"; en caso contrario imprime "{total} pesos: faltan {5000 - total} pesos para envío gratis".

③ Después del bloque if, llama a print(total) para confirmar que el mismo total sigue siendo accesible fuera.

(La explicación aparece una vez que ejecutes el código correctamente.)

Editor Python

Ejecutar el código para ver el resultado

Usar el operador morsa con while

En while, la morsa brilla cuando quieres que el valor extraído sirva a la vez como condición y como algo que usas dentro del cuerpo.

while queue y (task := queue.pop(0))
empieza el while¿cola vacía?task := queue.pop(0)salir del bucle(listo)usar task en el cuerposiguiente iteraciónno vacíavacía (False)se obtuvo tarea

Cada iteración primero comprueba si la cola está vacía. Si lo está, la evaluación de cortocircuito salta pop() y sale del bucle. En caso contrario queue.pop(0) toma la cabeza y la asigna a task, y el cuerpo se ejecuta con task antes de volver a iterar.

# Vaciar una cola elemento a elemento desde el frente
pending_jobs = ["enviar correo", "copia de seguridad", "desplegar"]

while pending_jobs and (job := pending_jobs.pop(0)):
    print(f"procesando: {job}")
# procesando: enviar correo / procesando: copia de seguridad / procesando: desplegar

# En cuanto pending_jobs se vacía, el lado izquierdo se evalúa como False y se salta pop() — el bucle sale.

pending_jobs and (job := pending_jobs.pop(0)) sale del bucle mediante evaluación de cortocircuito en el instante en que el lado izquierdo está vacío (False). Eso evita el bug de llamar a pop() sobre una lista vacía y provocar IndexError.

Imprime una lista de candidatos de búsqueda de uno en uno desde el principio.

① Define candidates = ["Ana García", "Carlos López", "María Rodríguez"].

② Usa while candidates and (name := candidates.pop(0)): para sacar uno del frente e imprimir "Candidato: {name}".

③ Después del bucle, imprime "Todos los candidatos revisados".

Editor Python

Ejecutar el código para ver el resultado

Cuándo usarlo y cuándo no

El operador morsa no añade ninguna capacidad más allá de ahorrarte pulsaciones. Escribir lógica en una línea es cómodo, pero también puede dañar la legibilidad, así que sé selectivo al recurrir a él.

SituaciónRecomendaciónPor qué
Reutilizar el valor comprobado dentro del cuerpoÚsaloDividirlo en dos líneas aleja la variable de donde se usa
En while, usar el valor extraído a la vez como condición y dentro del cuerpoÚsaloCombina la condición de salida del bucle con la extracción
Cálculo complejo o efectos secundarios dentro de la condiciónEvítaloEsconder trabajo dentro de una expresión hace que el flujo sea difícil de seguir
Solo una asignación simple sin condiciónNo lo usesUn `=` simple es más sencillo y fácil de leer

En este artículo aprendiste cómo usar el operador morsa := para combinar asignación y comprobación en una sola expresión.

QUIZ

Verificación de conocimientos

Responde cada pregunta una a una.

Pregunta 1¿Qué imprime el siguiente código?
items = [10, 20, 30]
if (n := len(items)) >= 2:
print(n)

Pregunta 2¿Cuál es la forma correcta de usar el operador morsa dentro de una condición if?

Pregunta 3¿Qué afirmación describe mejor al operador morsa :=?