Introducción
En este laboratorio, obtendrá una comprensión práctica de la precedencia de operadores en Python. Al igual que en matemáticas, Python sigue reglas específicas para determinar el orden en que se realizan las operaciones dentro de una expresión. Un dominio sólido de estas reglas es esencial para escribir código que sea a la vez correcto e predecible.
Comenzaremos explorando la precedencia de los operadores aritméticos básicos. Luego, veremos cómo los operadores de nivel superior, como la exponenciación y la comparación, encajan en la jerarquía. Finalmente, aprenderá a usar paréntesis para anular el orden de operaciones predeterminado, una técnica crucial tanto para controlar los cálculos como para mejorar la legibilidad del código.
Precedencia Aritmética Básica
En Python, al igual que en las matemáticas estándar, algunos operadores aritméticos tienen una precedencia mayor que otros. Específicamente, la multiplicación (*) y la división (/) se realizan antes que la suma (+) y la resta (-). Cuando los operadores tienen la misma precedencia, se evalúan de izquierda a derecha.
Observemos este comportamiento. El proceso de configuración ya ha creado un archivo para usted. En el explorador de archivos del WebIDE a la izquierda, busque y abra el archivo llamado operator_precedence.py ubicado en el directorio ~/project.
Agregue el siguiente código al archivo:
## Multiplication and division are evaluated before addition and subtraction.
result = 10 + 4 * 3 - 10 / 5
print(result)
Esta expresión contiene suma, multiplicación, resta y división. Predigamos el orden de las operaciones:
- Python primero realizará la multiplicación:
4 * 3es igual a12. - A continuación, realizará la división:
10 / 5es igual a2.0. Tenga en cuenta que la división estándar en Python 3 siempre da como resultado un número de punto flotante (float). - La expresión ahora es
10 + 12 - 2.0. - Finalmente, realizará la suma y la resta de izquierda a derecha:
10 + 12es22, y22 - 2.0es20.0.
Guarde el archivo presionando Ctrl + S. Para ejecutar el código, abra una terminal en el WebIDE (Terminal -> New Terminal) y ejecute el siguiente comando:
python ~/project/operator_precedence.py
Verá el resultado calculado impreso en la terminal.
20.0
La salida coincide con nuestra predicción, confirmando la precedencia de la multiplicación y la división sobre la suma y la resta.
Operadores de Nivel Superior
La jerarquía de operadores de Python se extiende más allá de la aritmética básica. El operador de exponenciación (**) tiene una precedencia mayor que la multiplicación y la división. Además, todos los operadores aritméticos tienen una precedencia mayor que los operadores de comparación como "mayor que" (>).
Agreguemos más ejemplos a nuestro script para ver esto en acción. Modifique el archivo ~/project/operator_precedence.py para incluir dos nuevas expresiones:
## Multiplication and division are evaluated before addition and subtraction.
result = 10 + 4 * 3 - 10 / 5
print(result)
## Exponentiation has higher precedence than multiplication.
exp_result = 2 * 3 ** 2
print(exp_result)
## Arithmetic operators have higher precedence than comparison operators.
comp_result = 18 > 5 + 10
print(comp_result)
Analicemos las nuevas líneas:
- En
2 * 3 ** 2, la exponenciación3 ** 2se calcula primero, resultando en9. Luego, se realiza la multiplicación2 * 9, dando como resultado18. - En
18 > 5 + 10, la suma5 + 10se calcula primero, resultando en15. Luego, se evalúa la comparación18 > 15, que esTrue.
Guarde el archivo (Ctrl + S) y ejecute el script nuevamente.
python ~/project/operator_precedence.py
La terminal mostrará ahora los resultados de las tres expresiones.
20.0
18
True
Esto confirma que Python evalúa primero la exponenciación, seguida de otras operaciones aritméticas y, finalmente, las operaciones de comparación.
Uso de Paréntesis para Controlar el Orden de Evaluación
Si bien las reglas de precedencia de Python son consistentes, las expresiones complejas pueden ser difíciles de leer. Para anular el orden predeterminado o simplemente para dejar claras sus intenciones, puede usar paréntesis (). Cualquier expresión encerrada entre paréntesis se evalúa primero.
Modifiquemos uno de nuestros ejemplos anteriores para ver el efecto de los paréntesis. Agregue una nueva expresión al final de ~/project/operator_precedence.py.
## Multiplication and division are evaluated before addition and subtraction.
result = 10 + 4 * 3 - 10 / 5
print(result)
## Exponentiation has higher precedence than multiplication.
exp_result = 2 * 3 ** 2
print(exp_result)
## Arithmetic operators have higher precedence than comparison operators.
comp_result = 18 > 5 + 10
print(comp_result)
## Using parentheses to change the order of evaluation.
forced_result = (10 + 4) * 3
print(forced_result)
Analicemos la nueva línea (10 + 4) * 3:
- Debido a que
10 + 4está dentro de paréntesis, se evalúa primero, resultando en14. - Luego, se realiza la multiplicación
14 * 3, dando como resultado42.
Esto es diferente de 10 + 4 * 3, que sabemos que se evalúa como 22. Los paréntesis cambiaron completamente el resultado.
Guarde el archivo y ejecute el script por última vez.
python ~/project/operator_precedence.py
La salida ahora incluirá el resultado de nuestra expresión entre paréntesis.
20.0
18
True
42
Usar paréntesis, incluso cuando no son estrictamente necesarios, es una buena práctica. Hace que el orden de las operaciones sea explícito, lo que mejora la legibilidad del código y reduce la posibilidad de errores causados por malentendidos de la precedencia.
Resumen
En este laboratorio, ha explorado el concepto fundamental de la precedencia de operadores en Python. Comenzó con la aritmética básica, confirmando que la multiplicación y la división tienen prioridad sobre la suma y la resta. Luego aprendió que otros operadores, como la exponenciación y la comparación, tienen su propio lugar en la jerarquía.
Lo más importante es que practicó el uso de paréntesis para controlar explícitamente el orden de evaluación. Esta habilidad es vital para escribir código que no solo sea funcionalmente correcto, sino también claro y fácil de entender para otros. Al dominar la precedencia de operadores, ha dado un paso significativo hacia la escritura de programas Python más robustos y confiables.



