Menu

Operadores en Python: aritméticos, de comparación, lógicos, de pertenencia y de identidad

Un recorrido completo por los operadores de Python — aritméticos, de comparación, lógicos, de asignación, de pertenencia y de identidad — con ejemplos de cada uno.

Los operadores son solo símbolos para acciones

Un operador es un símbolo (o palabra clave corta) que le dice a Python que haga algo con uno o dos valores — sumarlos, compararlos, comprobar si uno contiene al otro. Ya conoces unos cuantos de matemáticas básicas; Python tiene un puñado más para lógica, pertenencia e identidad.

Los repasaremos categoría a categoría.

Operadores aritméticos

Los operadores matemáticos estándar, más un par de especialidades de Python:

main.py
Output
Click Run to see the output here.

Dos piezas de esta lista son fáciles de olvidar:

  • / devuelve un float incluso cuando ambos lados son enteros. 10 / 2 te da 5.0. Para división entera, usa //.
  • % es módulo. n % 2 == 0 es la forma más limpia de comprobar si n es par.

Python sigue la precedencia matemática estándar: ** liga más fuerte que * y /, que ligan más fuerte que + y -. Los paréntesis anulan todo:

main.py
Output
Click Run to see the output here.

Usa paréntesis con generosidad cuando haya cualquier duda. No cuestan nada y hacen obvia la intención.

Operadores de comparación

Seis comparaciones, cada una devolviendo un booleano:

main.py
Output
Click Run to see the output here.

Python te permite encadenar comparaciones, lo que es inusual y útil:

main.py
Output
Click Run to see the output here.

Eso se lee "age tiene al menos 18 y es menor que 65". Por debajo es equivalente a 18 <= age and age < 65, pero se lee más como la desigualdad matemática.

Operadores lógicos

Escritos como palabras en inglés, no como símbolos:

main.py
Output
Click Run to see the output here.

Dos detalles que vale la pena conocer:

Evaluación en cortocircuito. and se detiene en el primer valor falsy; or se detiene en el primer valor truthy. El lado derecho ni siquiera se evalúa si el izquierdo ya decide la respuesta. Esto te deja protegerte contra errores de forma segura:

main.py
Output
Click Run to see the output here.

and/or devuelven el valor, no siempre True/False. Devuelven el operando que decidió el resultado:

main.py
Output
Click Run to see the output here.

Verás name = user_input or "anonymous" en código real — es un patrón de valor por defecto construido sobre este comportamiento.

Operadores de asignación

= asigna. Las formas compuestas combinan una operación con asignación:

main.py
Output
Click Run to see the output here.

Las formas compuestas también funcionan para strings (s += "more") y listas (lst += [4, 5]). No son más rápidas que escribir la forma completa; son solo más cortas.

Pertenencia: in y not in

Comprueba si un valor aparece dentro de un contenedor:

main.py
Output
Click Run to see the output here.

in funciona en cualquier iterable — listas, tuplas, sets, strings, dicts y más. Para búsquedas grandes, in sobre una lista es O(n); in sobre un set o dict es O(1). Eso importa cuando compruebas pertenencia muchas veces.

Identidad: is e is not

is comprueba si dos variables apuntan al mismo objeto en memoria, no solo a valores iguales:

main.py
Output
Click Run to see the output here.

Casi siempre quieres ==. El único sitio donde is brilla de verdad es comprobando contra None, True y False:

main.py
Output
Click Run to see the output here.

La convención de la comunidad es firme: is None, no == None. Lo mismo para is True (aunque raramente lo necesitas).

Operadores bitwise (sáltate esto la primera lectura)

Python también tiene operadores bitwise — &, |, ^, ~, <<, >> — para manipular bits individuales de un entero. Son útiles en criptografía, redes de bajo nivel y ciertos algoritmos. Puedes ignorarlos con seguridad en una primera pasada.

El operador morsa (:=)

Python 3.8 añadió :=, que asigna y devuelve un valor en una misma expresión. Útil en condiciones donde quieres capturar y testear un resultado a la vez:

main.py
Output
Click Run to see the output here.

Sin la morsa, llamarías a len(numbers) dos veces o añadirías una línea extra. No es esencial; úsalo donde reduzca repetición.

Chuleta de precedencia de operadores

De enlace más fuerte a más débil para los operadores que realmente vas a usar:

  1. ** — exponente
  2. *, /, //, % — multiplicación y división
  3. +, - — suma y resta
  4. <, <=, >, >=, ==, != — comparaciones
  5. not
  6. and
  7. or

En caso de duda, pon paréntesis. La claridad gana a la astucia.

Entrando en el flujo de control

Con los operadores bajo tu cinturón, puedes escribir condiciones. La siguiente página es if/elif/else — la construcción que deja a tu programa tomar un camino u otro en función de lo que los operadores le digan.

Preguntas frecuentes

¿Cuáles son los tipos principales de operadores en Python?

Aritméticos (+, -, *, /, //, %, **), de comparación (==, !=, <, <=, >, >=), lógicos (and, or, not), de asignación (=, +=, -=, …), de pertenencia (in, not in) y de identidad (is, is not).

¿Cuál es la diferencia entre == e is en Python?

== comprueba si dos valores son iguales. is comprueba si dos variables se refieren exactamente al mismo objeto en memoria. Para None, True y False, usa is — son singletons. Para todo lo demás, == es casi siempre lo que quieres.

¿Qué hace el operador % en Python?

Para números, % es el operador módulo — devuelve el resto de una división. 17 % 5 es 2. Para strings es una sintaxis de formateo de estilo antiguo (como "hello %s" % name), pero las f-strings han reemplazado mayoritariamente eso.

Aprende a programar con Coddy

COMENZAR