Cuando se trata de operadores en Python, debemos conocer el concepto de precedencia y asociatividad de los operadores de Python, ya que estos determinan las prioridades del operador; de lo contrario, veremos resultados inesperados.
Precedencia de operadores: Esto se usa en una expresión con más de un operador con diferente precedencia para determinar qué operación realizar primero.
Ejemplo: Resolver
10 + 20 * 30
10 + 20 * 30 is calculated as 10 + (20 * 30) and not as (10 + 20) * 30
Código:
Python3
# Precedence of '+' & '*' expr = 10 + 20 * 30 print(expr)
Producción:
610
Ejemplo: Ahora, veamos un ejemplo del operador lógico ‘ o ‘ & lógico ‘ y ‘. El bloque ‘ if ‘ se ejecuta incluso si la edad es 0. Porque la precedencia de los ‘ y ‘ lógicos es mayor que la de los ‘ o ‘ lógicos.
Python3
# Precedence of 'or' & 'and' name = "Alex" age = 0 if name == "Alex" or name == "John" and age >= 2 : print("Hello! Welcome.") else : print("Good Bye!!")
Producción:
Hello! Welcome.
Por lo tanto, para ejecutar el bloque ‘ else ‘ podemos usar paréntesis ( ) ya que su precedencia es la más alta entre todos los operadores.
Python3
# Precedence of 'or' & 'and' name = "Alex" age = 0 if ( name == "Alex" or name == "John" ) and age >= 2 : print("Hello! Welcome.") else : print("Good Bye!!")
Producción:
Good Bye!!
Asociatividad de operadores: si una expresión contiene dos o más operadores con la misma precedencia, se utiliza la asociatividad de operadores para determinar. Puede ser de izquierda a derecha o de derecha a izquierda .
Ejemplo: ‘ * ‘ y ‘/’ tienen la misma precedencia y su asociatividad es de izquierda a derecha , por lo que la expresión “100 / 10 * 10” se trata como “(100 / 10) * 10”.
Código:
Python3
# Left-right associativity # 100 / 10 * 10 is calculated as # (100 / 10) * 10 and not # as 100 / (10 * 10) print(100 / 10 * 10) # Left-right associativity # 5 - 2 + 3 is calculated as # (5 - 2) + 3 and not # as 5 - (2 + 3) print(5 - 2 + 3) # left-right associativity print(5 - (2 + 3)) # right-left associativity # 2 ** 3 ** 2 is calculated as # 2 ** (3 ** 2) and not # as (2 ** 3) ** 2 print(2 ** 3 ** 2)
Producción:
100 6 0 512
La precedencia y la asociatividad de los operadores son dos características principales de los operadores que determinan el orden de evaluación de las subexpresiones en ausencia de corchetes.
Ejemplo: Resolver
100 + 200 / 10 - 3 * 10
100 + 200 / 10 - 3 * 10 is calculated as 100 + (200 / 10) - (3 * 10) and not as (100 + 200) / (10 - 3) * 10
Código:
Python3
expression = 100 + 200 / 10 - 3 * 10 print(expression )
Producción:
90.0
Consulte la siguiente tabla de precedencia y asociatividad como referencia. Esta tabla enumera todos los operadores desde la precedencia más alta hasta la precedencia más baja.
Operador | Descripción | Asociatividad |
---|---|---|
( ) | paréntesis | de izquierda a derecha |
** | Exponente | De derecha a izquierda |
* / % | Multiplicación/división/módulo | de izquierda a derecha |
+ – | Suma resta | de izquierda a derecha |
<< >> | Desplazamiento bit a bit a la izquierda, desplazamiento bit a bit a la derecha | de izquierda a derecha |
< <= > >= |
Relacional menor que/menor que o igual a Relacional mayor que/mayor que o igual a |
de izquierda a derecha |
== != | Relacional es igual a/no es igual a | de izquierda a derecha |
no lo es en, no en |
Identidad Operadores de membresía |
de izquierda a derecha |
& | Y bit a bit | de izquierda a derecha |
^ | OR exclusivo bit a bit | de izquierda a derecha |
| | Bit a bit inclusivo O | de izquierda a derecha |
no | NO lógico | De derecha a izquierda |
y | Y lógico | de izquierda a derecha |
o | O lógico | de izquierda a derecha |
= += -= *= /= %= &= ^= |= <<= >>= |
Asignación Asignación de suma/resta Asignación de multiplicación/división Asignación de módulo/Y bit a bit Asignación de OR exclusivo/inclusivo bit a bit Asignación de desplazamiento bit a bit a la izquierda/derecha |
De derecha a izquierda |