Saltar al contenido principal
InicioTutorialesPython

Operadores en Python

Este tutorial trata los distintos tipos de operadores en Python, la sobrecarga de operadores, la precedencia y la asociatividad.
Actualizado 11 sept 2024  · 9 min leer

Al igual que en matemáticas, los lenguajes de programación como Python tienen operadores. Puedes pensar en ellas como funciones extremadamente sencillas que están en la base de la informática. Son las operaciones más sencillas a las que se puede reducir un programa informático. Son conocimientos esenciales para cualquier aspirante a Científico de Datos o Ingeniero de Software.

En este tutorial, aprenderás sobre

Si quieres aprender más sobre los fundamentos del lenguaje de programación Python, asegúrate de consultar nuestro curso gratuito Introducción a Python para la Ciencia de Datos.

Operadores aritméticos

Probablemente ya estés familiarizado con ellas, puesto que proceden de las matemáticas básicas.

Los operadores aritméticos son la suma (+), la resta (-), la multiplicación (*), la división (/), el exponente (**), la división por el suelo (//) y el módulo (%). Las cuatro primeras son bastante sencillas: suma, resta, multiplicación y división, y probablemente ya estés familiarizado con ellas.

# Addition
print(5 + 2)

# Subtraction
print(5 - 2)

# Multiplication
print(5 * 2)

# Division
print(5 / 2)
7
3
10
2.5

Los otros tres son un poco más complicados. El operador exponente significa "elevado a la potencia de". Por ejemplo, 2 ** 3 significa que 2 se multiplica por sí mismo 3 veces, por lo que 2 ** 3 es igual a 2 * 2 * 2, que es igual a 8.

La división por el suelo es igual que la división normal, salvo que el resultado siempre se redondea a la parte inferior. En el ejemplo siguiente, 5 se divide por 2, lo que da 2,5. Pero como es la división de suelo, 2,5 se redondea a 2.

Por último, el módulo es el resto tras la división. En el caso de 5%2, el número 2 sólo cabe dos veces en 5, lo que significa que el restante es 1.

# Exponent
print(5 ** 2)
# This is the same as 5 * 5

# Floor Division
print(5 // 2)

# Modulus
print(5 % 2)
25
2
1

En Python, el operador de suma también se puede utilizar para concatenar cadenas. Esto significa que se ensamblarán en una sola cadena, por ejemplo:

firstName = "Théo"

introduction = "Hi, my name is " + firstName + "."

print(introduction)
Hi, my name is Théo.

Operadores de asignación

Si tienes alguna experiencia en programación, seguro que habrás utilizado antes los operadores de asignación. Asignan un valor determinado a una variable. El más utilizado es =. Para utilizarla, sólo tienes que escribir el nombre de la variable a la que quieres asignar un nuevo valor, la dirección =, y el valor que quieres que se asigne. Por ejemplo, si quieres asignar el valor 100 a la variable balance, puedes hacer lo siguiente:

balance = 100
print(balance)
100

Si quieres incrementar el valor de balance con 10, puedes utilizar balance += 10. Es el equivalente a balance = balance + 10, pero es mucho más corto.

balance += 10
print(balance)
110

Lo mismo ocurre con -=, balance -= 10 es lo mismo que balance = balance - 10:

print(balance)
balance -= 10
print(balance)
110
100

Los demás operadores de asignación funcionan exactamente igual. Estos son:

  • *=
  • /=
  • **=
  • //=
  • %=

Operadores de comparación

Puedes utilizar operadores de comparación para, lo has adivinado, comparar los valores de las variables. Siempre devolverán un valor booleano, que puede ser True o False. Son seis:

  • Igualdad: ==
  • No son iguales: !=
  • Mayor que: >
  • Menos de: <
  • Mayor o igual: >=
  • Menor o igual: <=

He aquí algunos ejemplos de comparación:

a = 3
b = 5

print(a == b) # Equal
print(a != b) # Not equal
print(a > b) # Greater than
print(a < b) # Less than
print(a >= b) # Greater than or equal to
print(a <= b) # Less than or equal to
False
True
False
True
False
True

== y != también se pueden utilizar para comparar cadenas en lugar de números. Los demás operadores no son compatibles con las cadenas, ya que una cadena no puede ser realmente mayor que otra cadena.

print("Hello" == "World")
print("Python" != "R")
False
True

Operadores lógicos

Puede que ya los conozcas. En lógica, se denominan conectivas lógicas. También se utilizan mucho en el lenguaje humano. Son: and, or y not.

and sólo devolverá Verdadero si ambos operandos (los dos objetos booleanos que estás comparando) son Verdaderos. Por ejemplo:

print(True and True)
print(True and False)
print(False and False)
True
False
False

Para comprender el comportamiento de este operador lógico, puedes utilizar una tabla verdadero-falso:

a b a y b
Verdadero Verdadero Verdadero
Verdadero Falso Falso
Falso Verdadero Falso
Falso Falso Falso

or es Verdadero, siempre que cualquier (uno o más) operando sea Verdadero.

print(True and True)
print(True and False)
True
False
a b a o b
Verdadero Verdadero Verdadero
Verdadero Falso Verdadero
Falso Verdadero Verdadero
Falso Falso Falso

Observa que también funcionan con más de dos operandos, por ejemplo:

print(True and True and True and True)
print(True and True and True and False)
print(False or False or False or False)
print(False or False or False or True)
True
False
False
True

not devolverá lo contrario de su operando, así que True si se da False y viceversa.

print(not True)
False
a no un
Verdadero Falso
Falso Verdadero

Sobrecarga de operadores

Recuerda que antes has visto cómo + se puede utilizar para sumar números, pero que también se puede utilizar para concatenar, o combinar cadenas. Así que + funciona de forma diferente, según el tipo de objeto sobre el que lo utilices. Pero no siempre será así. A veces, el operador con el que trabajas simplemente no admite el tipo de objeto en el que quieres utilizarlo.

He aquí un ejemplo. Digamos que tienes dos objetos Dog, ozzy y filou. Pertenecen a la clase Dog siguiente. Puedes pensar en la clase como un plano del aspecto que deben tener los objetos y de cómo deben comportarse. En este caso, los objetos Dog tienen un nombre, una edad y una altura. Una vez definida la clase, puedes instanciar objetos. Uno de ellos es Ozzy, con una edad de 3 años y una altura de 30 centímetros. El otro es Filou, tiene 5 años y mide 65 centímetros.

Este ejemplo utiliza el concepto de Programación Orientada a Objetos. Si quieres saber más al respecto, no dejes de leer nuestro tutorial sobre Programación Orientada a Objetos en Python

Supongamos que quieres comparar ambos perros con el mayor que: >. Esto no funcionará. Aparecerá un error que dice '>' not supported between instances of 'Dog' and 'Dog'. Esto significa que > no sabe cómo comparar objetos de la clase Dog.

class Dog:

    def __init__(self, name, age, height):  
        self.name = name
        self.age = age
        self.height = height

ozzy = Dog("Ozzy", 3, 30)
filou = Dog("Filou", 5, 65)

print(filou > ozzy)
---------------------------------------------------------------------------

TypeError                                 Traceback (most recent call last)

<ipython-input-96-428069ab24cc> in <module>()
      9 filou = Dog("Filou", 5, 65)
     10
---> 11 print(filou > ozzy)


TypeError: '>' not supported between instances of 'Dog' and 'Dog'

Por suerte, con la sobrecarga de operadores, puedes definir el comportamiento del operador para cuando se llame a objetos Dog. En este caso, hay que definir un método llamado __gt__, que significa "mayor que", y que toma dos argumentos. Como queremos comparar a nuestros perros por su altura, el método devuelve self.height > other.height.

class Dog:

    def __init__(self, name, age, height):  
        self.name = name
        self.age = age
        self.height = height

    def __gt__(self,other):
        return self.height > other.height

ozzy = Dog("Ozzy", 3, 30)
filou = Dog("Filou", 5, 65)

print(filou > ozzy)
print(ozzy > filou)
True
False

Precedencia

Cuando combinas muchos operadores, las cosas pueden resultar confusas. Mira el siguiente ejemplo:

a = 2
b = 3
c = 9

a ** b > 5 and c - a // b >= 9 or b ** 2 == c
True

¿Cómo sabes cuál se ejecutará primero? ¿Cómo debes leer una línea de código con muchos de estos símbolos? ¿Se ejecuta de izquierda a derecha o hay algún orden específico?

Aquí es donde entra en juego la precedencia. Los operadores de Python se ejecutan en un orden muy concreto, y algunos tienen prioridad sobre otros.

En la tabla siguiente, puedes ver la precedencia de los operadores, ordenados de arriba a abajo. Estas reglas son las mismas en matemáticas, donde ciertos cálculos de una fórmula deben realizarse antes que otros.

Precedencia Operario Descripción
1 ** exponente
2 *, /, %, // multiplicar, dividir, módulo, división por el suelo
3 +, - más, menos
4 >, <, >=, <= comparación
5 ==, != igualdad
6 = %= /= //= -= += *= **= asignación
7 y, o, no lógico

Asociatividad

¡Ya has visto que la precedencia importa! ¿Pero qué pasa con las que están en el mismo nivel de precedencia, como la multiplicación y la división? ¿Se ejecutan al mismo tiempo? No. *, \, % y \\ se ejecutan de izquierda a derecha, mientras que ** se ejecuta de derecha a izquierda. Esto se llama asociatividad.

Mira el siguiente ejemplo. En este caso, los operadores se ejecutarán de izquierda a derecha, y la salida es 3.

print(5 * 2 // 3)
3

Sin embargo, si añades paréntesis, puedes cambiar el orden de ejecución de los operadores. Es la asociatividad, que funciona igual que la asociatividad en matemáticas. Lo que esté entre paréntesis se calculará primero. En este caso, primero se realizará la división por el suelo, seguida de la multiplicación.

print(5 * (2 // 3))

Conclusión

Ahora ya sabes qué son los operadores, cómo debes utilizarlos y cómo funcionan. También has aprendido sobre sobrecarga, precedencia y asociatividad. ¡Vas por buen camino para convertirte en un maestro de Python! Si quieres aprender aún más, no dudes en consultar nuestro curso Python Intermedio para la Ciencia de Datos.

Temas

Cursos de Python

Certificación disponible

Course

Introducción a la Ciencia de Datos en Python

4 hr
462.3K
Sumérgete en la ciencia de datos utilizando Python y aprende a analizar y visualizar tus datos con eficacia. No necesitas experiencia ni conocimientos de programación.
See DetailsRight Arrow
Start Course
Ver másRight Arrow