Course
Operadores en Python
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
- Los distintos tipos de operadores: Aritmética, Asignación, Comparación y Lógica
- Sobrecarga del operador
- Precedencia
- Asociatividad
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.
Cursos de Python
Course
Python intermedio
Course