Operadores en Python: guía completa con tipos y ejemplos
Cada vez que sumas dos números, comparas dos valores o decides qué bloque de código ejecutar, estás usando un operador en Python. En esta guía verás qué tipos existen, cómo funciona cada uno y cómo aplicarlos con ejemplos que puedes copiar y ejecutar. Si estás comenzando, esta explicación sobre cómo usar Python puede ayudarte a reforzar los fundamentos.
Este contenido fue revisado y actualizado el 28 de septiembre de 2026 por instructores especializados en programación y desarrollo web con experiencia impartiendo cursos de Python a estudiantes principiantes y avanzados en Grupo Codesi.
- ¿Qué son los operadores en Python y para qué sirven?
- Operadores aritméticos en Python
- Operadores de comparación o relacionales
- Operadores lógicos: and, or y not
- Operadores de asignación en Python
- Operaciones bit a bit en Python
- Operadores de identidad en Python: is e is not
- Operadores de pertenencia en Python: in y not in
- Expresión condicional u operador ternario en Python
- Precedencia de operadores en Python
- Asociatividad de las operaciones en Python
- Sobrecarga de operadores en Python
- Errores frecuentes al usar operadores en Python
- Preguntas frecuentes sobre operadores en Python
¿Qué son los operadores en Python y para qué sirven?
Los operadores en Python son símbolos o palabras reservadas que indican qué operación realizar sobre uno o más valores, variables u objetos llamados operandos. Por ejemplo, en 10 + 5, + es el operador y los números son los operandos. Si todavía no conoces el lenguaje, puedes repasar primero qué es Python antes de continuar.
Sirven para realizar cálculos, comparar y asignar valores, comprobar pertenencia o identidad y construir expresiones que devuelven resultados como True o False. Por ejemplo, edad >= 18 permite evaluar una condición que después puede utilizarse dentro de un if en Python para decidir qué instrucciones ejecutar.
¿Cuáles son los tipos de operadores en Python?
Python dispone de distintos tipos de operadores para realizar cálculos, comparaciones, asignaciones y evaluaciones lógicas sobre datos. Esta clasificación permite identificar rápidamente qué operación utilizar según la tarea:
| Tipo | Operadores principales | ¿Para qué sirven? |
|---|---|---|
| Aritméticos | +, -, *, /, //, %, **, @ |
Realizar cálculos y operaciones matemáticas. |
| Comparación | ==, !=, >, <, >=, <= |
Comparar valores y obtener True o False. |
| Lógicos | and, or, not |
Combinar o negar expresiones booleanas. |
| Asignación | =, +=, -=, *=, /=, := |
Asignar o actualizar valores. |
| Bit a bit | &, |, ^, ~, <<, >> |
Operar sobre la representación binaria de enteros. |
| Identidad | is, is not |
Comprobar si dos referencias apuntan al mismo objeto. |
| Pertenencia | in, not in |
Comprobar si un elemento pertenece a una colección. |
Operadores aritméticos en Python
Sumar, restar, multiplicar o dividir valores numéricos: para eso están los operadores aritméticos en Python. Los principales son +, -, *, /, //, % y **; Python también incorpora @ para multiplicación matricial en objetos que implementan esta operación. Estas mismas operaciones son la base de tareas más avanzadas, como el análisis de datos con pandas en Python.
Suma, resta y multiplicación
Los símbolos +, - y * permiten sumar, restar y multiplicar respectivamente. Copia y ejecuta este ejemplo:
a = 10
b = 4
print(a + b) # 14
print(a - b) # 6
print(a * b) # 40
División (/), división entera (//) y módulo (%)
/ realiza una división verdadera, // aplica división de piso (floor division) y devuelve el resultado redondeado hacia abajo, mientras que % obtiene el resto asociado a esa división.
a = 17
b = 5
print(a / b) # 3.4
print(a // b) # 3
print(a % b) # 2
Una aplicación habitual de % es comprobar si un número es par:
numero = 12
if numero % 2 == 0:
print("El número es par")
else:
print("El número es impar")
Potencia (**) en Python
El operador ** eleva el operando izquierdo a la potencia indicada por el derecho.
base = 5
exponente = 3
resultado = base ** exponente
print(resultado) # 125
Multiplicación matricial (@)
@ es el operador destinado a la multiplicación matricial. Python define su sintaxis, pero son los objetos utilizados los que deben implementar este comportamiento. Una aplicación habitual aparece en bibliotecas como NumPy:
import numpy as np
matriz_a = np.array([[1, 2], [3, 4]])
matriz_b = np.array([[5, 6], [7, 8]])
resultado = matriz_a @ matriz_b
print(resultado)
El resultado es:
[[19 22] [43 50]]
Este último ejemplo requiere tener NumPy instalado; @ no realiza multiplicación matricial directamente sobre listas comunes de Python.
Operadores de comparación o relacionales
¿Es mayor, menor o igual? Los operadores de comparación en Python —también llamados relacionales— responden justo eso, y siempre devuelven True o False. Son la base de las condiciones y las decisiones dentro de un programa, incluidos los filtros que se usan dentro de una comprensión de listas en Python.
Igualdad (==) y desigualdad (!=)
== comprueba si dos valores son iguales, mientras que != verifica si son diferentes.
edad = 20
print(edad == 20) # True
print(edad != 18) # True
Mayor que (>) y menor que (<)
> comprueba si el valor izquierdo es mayor que el derecho y < evalúa si es menor.
precio = 850
print(precio > 500) # True
print(precio < 1000) # True
Mayor o igual (>=) y menor o igual (<=)
>= y <= incluyen el valor límite en la comparación, algo especialmente útil al validar rangos.
calificacion = 85
print(calificacion >= 70) # True
print(calificacion <= 100) # True
Comparaciones encadenadas en Python
Python permite combinar varias comparaciones en una sola expresión. Por ejemplo, 18 <= edad <= 65 comprueba directamente si una edad se encuentra dentro de ese intervalo.
edad = 25
if 18 <= edad <= 65:
print("La edad está dentro del rango")
else:
print("La edad está fuera del rango")
Esta sintaxis es equivalente a escribir edad >= 18 and edad <= 65, pero resulta más concisa y legible.
Operadores lógicos: and, or y not
Cuando una sola condición no basta, entran en juego and, or y not: los operadores lógicos en Python que combinan o niegan condiciones. Se apoyan en las comparaciones y en las estructuras condicionales para decidir cuándo debe ejecutarse una acción.
AND (and): combinar condiciones +
and permite que una expresión se considere verdadera si todas las condiciones necesarias se cumplen.
edad = 25
tiene_entrada = True
if edad >= 18 and tiene_entrada:
print("Acceso permitido")
else:
print("Acceso denegado")
OR (or): evaluar condiciones alternativas +
or permite que la expresión se cumpla si al menos una de las alternativas resulta verdadera.
es_estudiante = False
es_docente = True
if es_estudiante or es_docente:
print("Descuento disponible")
else:
print("Precio regular")
NOT (not): negar una condición +
not invierte el valor lógico de una expresión: convierte True en False y viceversa.
sesion_iniciada = False
if not sesion_iniciada:
print("Debes iniciar sesión")
else:
print("Bienvenido")
Cómo combinar condiciones lógicas y comparaciones +
edad = 22
tiene_entrada = True
esta_bloqueado = False
if (edad >= 18 and tiene_entrada) and not esta_bloqueado:
print("Acceso autorizado")
else:
print("Acceso denegado")
En este ejemplo, el acceso se concede únicamente si la persona es mayor de edad, tiene entrada y no está bloqueada. Estas expresiones se utilizan habitualmente con condicionales if en Python para controlar el flujo del programa.
Operadores de asignación en Python
Guardar un valor en una variable y actualizarlo después es de lo primero que se hace en cualquier programa; para eso están los operadores de asignación en Python. Además de =, Python dispone de asignaciones compuestas que combinan una operación con la actualización de la variable.
Asignación con =
El símbolo = asigna a una variable el valor o resultado de la expresión situada a su derecha. No debe confundirse con ==, que compara dos valores.
nombre = "Ana"
edad = 25
precio = 19.90
print(nombre) # Ana
print(edad) # 25
print(precio) # 19.9
Asignaciones compuestas: +=, -=, *=, /= y otras
Las asignaciones compuestas permiten actualizar una variable de forma concisa. Por ejemplo, contador += 1 equivale habitualmente a contador = contador + 1.
numero = 20
numero += 5
print(numero) # 25
numero -= 3
print(numero) # 22
numero *= 2
print(numero) # 44
numero /= 4
print(numero) # 11.0
También existen //=, %=, **=, &=, |=, ^=, >>= y <<=, entre otras formas de asignación aumentada.
Expresión de asignación (:=) u operador morsa
:= crea una expresión de asignación y se conoce popularmente como operador morsa (walrus operator). Permite guardar un valor en una variable mientras ese mismo valor forma parte de otra expresión, evitando repetir ciertos cálculos. Está disponible desde Python 3.8.
numeros = [10, 20, 30, 40]
if (cantidad := len(numeros)) > 3:
print(f"La lista contiene {cantidad} elementos")
El ejemplo asigna el resultado de len(numeros) a cantidad y, dentro de la misma expresión, comprueba si es mayor que 3. Si trabajas con distintas ediciones del lenguaje, puedes consultar las versiones de Python y sus diferencias.
¿Quieres aprender Python con proyectos reales?
Comprender los operadores te permite escribir condiciones, cálculos y expresiones con mucha más seguridad. Si quieres seguir avanzando, en Grupo Codesi puedes aprender Python desde cero y aplicar lo aprendido en proyectos con Python para practicar.
Operaciones bit a bit en Python
Las operaciones bit a bit en Python trabajan directamente con la representación binaria de los números enteros, es decir, con sus 0 y 1. Aunque al principio pueden parecer complejas, resultan más sencillas cuando observamos qué ocurre con cada bit.
AND bit a bit (&)
& compara los bits de dos números. El resultado contiene un 1 únicamente en las posiciones donde ambos bits son 1.
a = 6 # Binario: 110
b = 3 # Binario: 011
resultado = a & b
print(resultado) # 2
# 110
# 011
# ---
# 010 = 2
OR bit a bit (|)
| produce un 1 cuando al menos uno de los dos bits es 1.
a = 6 # 110
b = 3 # 011
resultado = a | b
print(resultado) # 7 # 110 # 011 # --- # 111 = 7
XOR bit a bit (^)
^ devuelve un 1 cuando los bits comparados son diferentes: uno es 1 y el otro 0.
a = 6 # 110
b = 3 # 011
resultado = a ^ b
print(resultado) # 5 # 110 # 011 # --- # 101 = 5
NOT bit a bit (~)
~ invierte los bits de un número. En los enteros de Python se cumple la relación ~x = -(x + 1), por eso el resultado puede sorprender si esperabas simplemente cambiar los 0 por 1.
numero = 5
resultado = ~numero
print(resultado) # -6
Desplazamiento de bits: << y >>
<< desplaza los bits de un número hacia la izquierda y rellena con ceros por la derecha, lo que equivale a multiplicar por una potencia de 2. >> desplaza los bits hacia la derecha, equivalente a una división entera por una potencia de 2.
a = 5 # Binario: 101
print(a << 1) # 10 -> Binario: 1010 (5 * 2)
print(a << 2) # 20 -> Binario: 10100 (5 * 4)
print(a >> 1) # 2 -> Binario: 10 (5 // 2)
Operadores de identidad en Python: is e is not
¿Dos variables apuntan al mismo objeto en memoria, o solo tienen el mismo valor? Esa es la pregunta que resuelven is e is not, los operadores de identidad en Python. No comparan valores, sino identidad.
Cómo funcionan is e is not +
is devuelve True cuando dos referencias apuntan al mismo objeto; is not hace lo contrario. Puedes comprobarlo fácilmente utilizando dos variables que comparten una misma lista:
lista_a = [10, 20, 30]
lista_b = lista_a
lista_c = [10, 20, 30]
print(lista_a is lista_b) # True
print(lista_a is lista_c) # False
print(lista_a is not lista_c) # True
Aunque lista_a y lista_c contienen los mismos elementos, son dos objetos diferentes. En cambio, lista_b apunta exactamente al mismo objeto que lista_a.
Diferencia entre is y == +
== pregunta “¿tienen el mismo valor?”, mientras que is pregunta “¿son el mismo objeto?”.
lista_a = [1, 2, 3]
lista_b = [1, 2, 3]
print(lista_a == lista_b) # True: tienen el mismo contenido
print(lista_a is lista_b) # False: son objetos distintos
El uso más habitual de is es comprobar objetos únicos como None. Por convención y claridad, se utiliza valor is None o valor is not None en lugar de compararlo con ==.
usuario = None
if usuario is None:
print("No hay un usuario asignado")
Operadores de pertenencia en Python: in y not in
in y not in —los operadores de pertenencia en Python— comprueban si un elemento aparece o no dentro de una colección, como una lista, tupla, conjunto, diccionario o cadena de texto, y devuelven True o False. Este mismo in es también la base de un bucle for en Python para recorrer elementos de una colección.
Comprobar pertenencia con in
in devuelve True cuando encuentra el elemento buscado. Por ejemplo, puedes comprobar fácilmente si un lenguaje está dentro de una lista:
lenguajes = ["Python", "Java", "JavaScript"]
print("Python" in lenguajes) # True
print("PHP" in lenguajes) # False
También funciona con cadenas de texto y resulta útil para realizar comprobaciones sencillas:
mensaje = "Estoy aprendiendo Python"
if "Python" in mensaje:
print("Python aparece en el texto")
En los diccionarios, in y not in comprueban las claves de forma predeterminada, no los valores.
usuario = {
"nombre": "Ana",
"edad": 25
}
print("nombre" in usuario) # True
print("correo" not in usuario) # True
Comprobar ausencia con not in
not in realiza la comprobación inversa: devuelve True cuando un elemento no está presente en una colección. Resulta útil, por ejemplo, para validar que un usuario no pertenezca a una lista de elementos bloqueados.
usuarios_bloqueados = ["Carlos", "Laura"]
usuario = "Ana"
if usuario not in usuarios_bloqueados:
print("El usuario puede ingresar")
else:
print("Acceso bloqueado")
Expresión condicional u operador ternario en Python
Cuando la decisión es simple, no siempre hace falta escribir un bloque if-else completo. La expresión condicional en Python —conocida habitualmente como operador ternario— resuelve justo ese caso: elige entre dos valores en una sola línea según se cumpla o no una condición.
Sintaxis de la expresión condicional
Python utiliza la estructura valor_si_verdadero if condicion else valor_si_falso. Primero se evalúa la condición y después se devuelve uno de los dos valores.
edad = 20
estado = "Mayor de edad" if edad >= 18 else "Menor de edad"
print(estado) # Mayor de edad
También puede utilizarse directamente al mostrar o asignar un resultado:
numero = 7
tipo = "Par" if numero % 2 == 0 else "Impar"
print(tipo) # Impar
Expresión ternaria vs. if-else
Ambas alternativas pueden producir el mismo resultado. La expresión ternaria es más compacta para una decisión simple; cuando existen varias instrucciones o condiciones complejas, un bloque if-else suele ser más fácil de leer y mantener.
# Expresión condicional
edad = 16
acceso = "Permitido" if edad >= 18 else "Denegado"
print(acceso)
# La misma lógica con if-else
if edad >= 18:
acceso = "Permitido"
else:
acceso = "Denegado"
print(acceso)
Si todavía estás familiarizándote con las condiciones, puedes profundizar en cómo funciona if en Python antes de utilizar expresiones condicionales más complejas.
Precedencia de operadores en Python
La precedencia de operadores en Python determina qué operaciones se evalúan primero cuando una expresión contiene varios operadores. Conocer este orden evita resultados inesperados y ayuda a escribir código más claro.
Tabla de precedencia de mayor a menor +
| Prioridad | Operadores | Descripción |
|---|---|---|
| 1 | () |
Agrupación mediante paréntesis |
| 2 | ** |
Potencia |
| 3 | +x, -x, ~x |
Operadores unarios y NOT bit a bit |
| 4 | *, @, /, //, % |
Multiplicación, multiplicación matricial, divisiones y módulo |
| 5 | +, - |
Suma y resta |
| 6 | <<, >> |
Desplazamientos de bits |
| 7 | & |
AND bit a bit |
| 8 | ^ |
XOR bit a bit |
| 9 | | |
OR bit a bit |
| 10 | ==, !=, <, <=, >, >=, is, is not, in, not in |
Comparación, identidad y pertenencia |
| 11 | not |
Negación lógica |
| 12 | and |
AND lógico |
| 13 | or |
OR lógico |
| 14 | valor if condición else valor |
Expresión condicional |
| 15 | := |
Expresión de asignación |
Cómo usar paréntesis para controlar el orden de evaluación +
resultado_1 = 2 + 3 * 4
resultado_2 = (2 + 3) * 4
print(resultado_1) # 14
print(resultado_2) # 20
Los paréntesis también mejoran la legibilidad cuando combinas condiciones. Aunque conozcas las reglas de precedencia, utilizarlos de forma razonable puede hacer que la intención del código resulte evidente para quien lo lea.
edad = 25
tiene_permiso = True
esta_bloqueado = False
if (edad >= 18 and tiene_permiso) and not esta_bloqueado:
print("Acceso permitido")
Asociatividad de las operaciones en Python
La asociatividad en Python indica cómo se agrupan ciertas operaciones cuando aparecen operadores con la misma precedencia. En términos simples, ayuda a determinar si una expresión se interpreta agrupando primero desde la izquierda o desde la derecha.
Evaluación de izquierda a derecha
Muchos operadores se asocian de izquierda a derecha. Por ejemplo, la división y la multiplicación tienen la misma precedencia, por lo que esta expresión se agrupa como (100 / 10) * 2:
resultado = 100 / 10 * 2
print(resultado) # 20.0
Otro ejemplo fácil de comprobar es la resta:
resultado = 20 - 5 - 3
print(resultado) # 12 # Equivale a: (20 - 5) - 3
Evaluación de derecha a izquierda
La potencia ** es una excepción importante: se asocia de derecha a izquierda. Por ello, 2 ** 3 ** 2 se interpreta como 2 ** (3 ** 2), no como (2 ** 3) ** 2.
resultado = 2 ** 3 ** 2
print(resultado) # 512
print(2 ** (3 ** 2)) # 512
print((2 ** 3) ** 2) # 64
Diferencia entre precedencia y asociatividad
Precedencia y asociatividad no significan lo mismo. La precedencia establece qué tipo de operador tiene prioridad; la asociatividad determina cómo se agrupan operadores de la misma prioridad cuando la gramática permite esa agrupación.
| Concepto | Pregunta que responde | Ejemplo |
|---|---|---|
| Precedencia | ¿Qué operador tiene mayor prioridad? | 2 + 3 * 4 → 14 |
| Asociatividad | ¿Cómo se agrupan operadores de igual prioridad? | 20 - 5 - 3 → 12 |
Una forma sencilla de recordarlo es: primero importa la precedencia y, cuando corresponde, la asociatividad resuelve la agrupación. Si una expresión puede resultar ambigua para una persona que lee el código, usar paréntesis explícitos suele ser la opción más clara.
Sobrecarga de operadores en Python
¿Qué pasa si sumas dos objetos que tú mismo creaste con una clase? Depende de cómo los definas: la sobrecarga de operadores en Python te deja decidir cómo se comportan operadores como +, -, * o == cuando trabajan con tus propios objetos, para que una clase ofrezca operaciones intuitivas sin llamar a métodos explícitamente.
¿Qué es y cómo funciona la sobrecarga?
Python implementa muchas operaciones mediante métodos especiales, conocidos también como dunder methods. Cuando escribes a + b, por ejemplo, el protocolo de operaciones puede recurrir a métodos como __add__() para determinar cómo deben combinarse esos objetos. Si quieres repasar cómo se definen y utilizan las funciones en Python, es un buen punto de partida antes de escribir tus propios métodos especiales.
Este ejemplo crea una clase para representar puntos y permite sumarlos utilizando directamente +:
class Punto:
def __init__(self, x, y):
self.x = x
self.y = y
def __add__(self, otro):
return Punto(self.x + otro.x, self.y + otro.y)
def __repr__(self):
return f"Punto({self.x}, {self.y})"
punto_1 = Punto(2, 3)
punto_2 = Punto(4, 5)
resultado = punto_1 + punto_2
print(resultado) # Punto(6, 8)
En este caso, + no suma números directamente: __add__() define que deben sumarse las coordenadas correspondientes de ambos objetos.
Métodos especiales para personalizar operaciones
Cada operación utiliza métodos especiales concretos. Estos son algunos de los más habituales:
| Operación | Método especial | Ejemplo |
|---|---|---|
| Suma | __add__() |
a + b |
| Resta | __sub__() |
a - b |
| Multiplicación | __mul__() |
a * b |
| División | __truediv__() |
a / b |
| Igualdad | __eq__() |
a == b |
| Menor que | __lt__() |
a < b |
La sobrecarga resulta especialmente útil cuando el significado de una operación es natural para el objeto. La clave no es redefinir operadores porque Python lo permita, sino hacerlo cuando consiga que el código sea más claro y predecible.
Aprende Python desde cero y crea proyectos reales
Si deseas continuar aprendiendo, también puedes consultar nuestra comparativa sobre los mejores cursos de Python disponibles actualmente. ¡Asegura tu lugar Aqui!
Errores frecuentes al usar operadores en Python
Al trabajar con operadores en Python, algunos errores aparecen con frecuencia incluso cuando el código parece correcto a simple vista. Entender la diferencia entre asignación, igualdad, identidad y lógica ayuda a detectar estos problemas antes de que afecten al resultado del programa.
Confundir asignación (=) con igualdad (==)
= sirve para asignar un valor, mientras que == comprueba igualdad. Por eso, escribir una asignación con = donde Python espera una condición, como en if edad = 18:, provoca un error de sintaxis.
edad = 18
# Incorrecto:
#if edad = 18:
# print("Tiene 18 años")
# Correcto:
if edad == 18:
print("Tiene 18 años")
Confundir identidad (is) con igualdad (==)
== compara valores; is comprueba si dos referencias apuntan al mismo objeto. Por eso, no conviene utilizar is como sustituto de ==.
lista_a = [1, 2, 3]
lista_b = [1, 2, 3]
print(lista_a == lista_b) # True
print(lista_a is lista_b) # False
Una excepción práctica muy habitual es comprobar None: la forma recomendada es valor is None o valor is not None.
Preguntas frecuentes sobre operadores en Python
Estas respuestas resumen algunas de las dudas más habituales sobre los operadores en Python, con ejemplos breves que puedes copiar y ejecutar.
¿Qué diferencia hay entre / y // en Python? +
/ realiza una división verdadera y devuelve un resultado de tipo float. // realiza una división de piso (floor division): devuelve el piso matemático del cociente. Con operandos enteros, su resultado es un int; si interviene un float, el resultado es un float.
print(7 / 2) # 3.5
print(7 // 2) # 3
print(7 // 2.0) # 3.0
print(-7 // 2) # -4
¿Qué significa ** en Python? +
** es el operador de potencia: eleva el valor de la izquierda al exponente indicado a la derecha. Por ejemplo, 2 ** 3 equivale a 2³.
print(2 ** 3) # 8
print(5 ** 2) # 25
print(9 ** 0.5) # 3.0
¿Para qué sirve % en Python? +
% es el operador módulo y obtiene el resto asociado a la división de piso. Un uso muy común consiste en comprobar si un número es par o impar.
numero = 14
if numero % 2 == 0:
print("Es par")
else:
print("Es impar")
¿Qué significa := en Python? +
:= representa una expresión de asignación y se conoce como operador morsa. Desde Python 3.8 permite asignar un valor a una variable y utilizarlo dentro de la misma expresión.
datos = [10, 20, 30]
if (cantidad := len(datos)) > 2:
print(f"Hay {cantidad} elementos")
¿Cuál es el orden de los operadores en Python? +
not, and, or, expresión condicional y :=. Los paréntesis permiten hacer explícito el orden que quieres aplicar.
print(2 + 3 * 4) # 14
print((2 + 3) * 4) # 20
¿Te gustaría seguir aprendiendo más de Python?
Te compartimos una selección de artículos para que sigas aprendiendo Python.
Contacto directo con un asesor en formación tecnológica
Llámanos o escríbenos. Habla con uno de nuestros instructores. Podemos escuchare y contarte cual es el mejor curso para ti.
Avenida General Francisco Morazan nùmero 430 interior 2 entrada por calle 77, timbre 2 Alcaldia Venustiano Carranza C.P. 15020 CDMX Horarios de Atención: Lunes a Jueves 7 am a 7 pm - Sabados 7 am a 3 pm - Domingos 8 am a 2 pm
Contacta a Grupo Codesi
¿Tienes alguna duda sobre aprender Python? Escríbenos y te responderemos lo antes posible. ¡Contáctanos sin compromiso!