Pythons tiene siete operadores básicos:
Operator | Name | Description |
---|---|---|
a + b |
Suma | Suma de a y b |
a - b |
Resta | Resta of a y b |
a * b |
Multiplicación | Producto of a y b |
a / b |
División | Cociente de a y b |
a // b |
División sin resto | Cociente de a y b , sacando la fracción |
a % b |
Modulo | Resto de la división a por b |
a ** b |
Potencia | a a la b potencia |
-a |
Negación | El negativo de a |
+a |
Suma unaria | a no cambia (no sé para qué sirve) |
In [1]:
(4 + 8) * (6.5 - 3)
Out[1]:
In [2]:
# división
print(11 / 2)
In [3]:
# División entera, el normal en C, por ejemplo, si el tipo es int
print(11 // 2)
El punto fuerte de las compus son las operaciones sobre enteros. Y los enteros están hechos de bits, asi que hay algunas ops que son más faciles que otras. Esta es la lista de los 6 ops de Python que trabajan con enteros a nivel de bits:
Operator | Name | Description |
---|---|---|
a & b |
Bitwise AND | Bits en ambos a y b |
a | b |
Bitwise OR | Bits en a o b or both |
a ^ b |
Bitwise XOR | Bits en a o b pero no en ambos |
a << b |
Bit shift left | Desplaza bits de a a la izquierda b posiciones |
a >> b |
Bit shift right | Desplaza bits de a a la derecha b posiciones |
~a |
Bitwise NOT | Negación de los bits en 1 de a |
JvdP dice que estos operadores son usados mucho menos que los de más arriba. Es cierto, sin embargo, las operaciones sobre bits son indispensables cuando hacemos zip
, por ejemplo. Para ver cómo actuan estos operadores, tenemos que saber la representación binaria de los números. En Python podemos hacer eso con la función bin()
, que toma un entero como argumento, así:
In [8]:
bin(16383)
Out[8]:
In [10]:
2**9
Out[10]:
In [20]:
hex(20)
Out[20]:
Como ven, el resultado tiene un 0b
al principio, que nos dice que el número es binario (0x
, para hexa, supongo). El resto the los números indican que el número 10 se representa como la suma de $1 \cdot 2^3 + 0 \cdot 2^2 + 1 \cdot 2^1 + 0 \cdot 2^0$.
In [21]:
bin(4)
Out[21]:
In [22]:
4 | 10
Out[22]:
In [23]:
bin(4 | 10)
Out[23]:
In [24]:
bin(1)
Out[24]:
Usualmente son ops mas rápidos que los otros (por ejemplo para potencias de 2!)
In [25]:
bin(1<<1)
Out[25]:
In [26]:
bin(1<<2)
Out[26]:
In [27]:
bin(4)
Out[27]:
Ya vimos como las variables se asignan con el ops =
, y los valores se guardan para usarlos despues:
In [29]:
a = 24
print(a)
In [37]:
a + 2
Out[37]:
In [31]:
print(a)
Es decir, también podríamos querer modificar ese valor con uno nuevo sin perder el anterior.
In [38]:
a += 2 # equivalent to a = a + 2
print(a)
Esta clase de operación (hasta tiene nombre: acumulador) que Python tiene una lista de operadores de "actualización" (no sé si se llaman así en español... traduje literalmente), uno para cada op de los que vimos más arriba.
a += b |
a -= b |
a *= b |
a /= b |
a //= b |
a %= b |
a **= b |
a &= b |
a |= b |
a ^= b |
a <<= b |
a >>= b |
La otra "casta" de operaciones que es vital para programar es la de comparaciones: las que retornan verdadero (True
) o falso (False
). Los ops de comparación son listados en la siguiente tabla:
Operación | Descripción | Operación | Descripción | |
---|---|---|---|---|
a == b |
a igual a b |
a != b |
a diferente de b |
|
a < b |
a menor que b |
a > b |
a mayor que b |
|
a <= b |
a menor o igual a b |
a >= b |
a mayor o igual a b |
In [39]:
# 25 is odd
25 % 2 == 1
Out[39]:
In [40]:
# 66 is odd
66 % 2 == 1
Out[40]:
In [41]:
# check if a is between 15 and 30
a = 25
15 < a < 30
Out[41]:
In [42]:
-1 == ~0
Out[42]:
Twos-complement!
Cuando trabajamos con valores booleanos (V o F), Python tiene operadores lógicos especiales para compararlos:
In [44]:
x = 4
(x < 6) and (x > 2)
Out[44]:
In [45]:
(x > 10) or (x % 2 == 0)
Out[45]:
In [46]:
not(x < 6)
Out[46]:
Operator | Description |
---|---|
a is b |
V si a y b son objetos idénticos |
a is not b |
V si a y b no son objetos idénticos |
a in b |
V si a está en b |
a not in b |
V si a no está en b |
Estos operadores chequean si dos objetos son los mismos. Ya se van a acordar del ejemplo de un par de clases anteriores.
In [57]:
a = [1, 2, 3]
b = [1, 2, 3]
In [58]:
a == b
Out[58]:
In [59]:
a is b
Out[59]:
In [54]:
a is not b
Out[54]:
And this is what identical objects look like:
In [60]:
a = [1, 2, 3]
b = a
a is b
Out[60]:
En el primer ejemplo las variables están apuntando a objetos diferentes. El op is
chequea que los punteros sean los mismos. Tengan cuidado entonces cuando usan is
, cuando de verdad van a querer decir ==
.
In [61]:
1 in [1, 2, 3]
Out[61]:
In [62]:
2 not in [1, 2, 3]
Out[62]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]: