Precedencia y asociatividad de operadores en Python

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ógicoo ‘ & ​​lógicoy ‘. 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

Publicación traducida automáticamente

Artículo escrito por ankthon y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *