Operadores de comparación de Python encadenando/agrupando de izquierda a derecha?
comparison operator-precedence (1)
Agrupación (esto es lo que hacen los operadores sin comparación):
a + b + c means (a + b) + c
Encadenamiento (esto es lo que hacen los operadores de comparación):
a < b < c means (a < b) and (b < c)
Agrupación de izquierda a derecha (esta es la forma en que se agrupan las cosas):
5 - 2 - 1 means (5 - 2) - 1 == 2
en lugar de agrupar de derecha a izquierda (esto produciría un resultado diferente):
5 - (2 - 1) == 4
(editar)
El encadenamiento se deja de derecha a izquierda, por lo que en
a < b < c
, la expresión
a < b
se evalúa antes que
b < c
, y si
a < b
es falso,
b < c
no se evalúa.
(2 < 1 < f())
da el valor
False
sin llamar a la función
f
, porque
2 < 1
evalúa como falso, por lo que no es necesario realizar la segunda comparación.
f() > 1 > g()
llama a
f()
para evaluar la primera comparación, y dependiendo del resultado, podría o no necesitar evaluar la segunda condición, que requiere llamar a
g()
.
La documentación de Python para los estados de precedencia del operador :
Los operadores en el mismo recuadro agrupan de izquierda a derecha (excepto las comparaciones, incluidas las pruebas, que tienen la misma precedencia y la misma cadena de izquierda a derecha; consulte la sección Comparisons ...)
¿Qué significa esto? Específicamente:
-
"Los operadores en el mismo cuadro agrupan de izquierda a derecha (excepto las comparaciones ...)" - ¿las comparaciones no agrupan de izquierda a derecha?
-
Si las comparaciones no se agrupan de izquierda a derecha, ¿qué hacen en su lugar? ¿Se "encadenan" en lugar de "grupo"?
-
Si las comparaciones "encadenan" en lugar de "agrupar", ¿cuál es la diferencia entre "encadenar" y "agrupar"?
-
¿Cuáles serían algunos ejemplos para demostrar que los operadores de comparación encadenan de izquierda a derecha en lugar de derecha a izquierda?