not - operadores relacionales en python
Prioridad de las declaraciones lógicas NOT AND & OR en python (5)
De los operadores booleanos, la precedencia, de la más débil a la más fuerte, es la siguiente:
-
or
-
and
-
not x
-
is not
not in
Donde los operadores tienen la misma prioridad, la evaluación procede de izquierda a derecha.
Hasta donde yo sé, en C & C ++, la secuencia de prioridad para NOT AND & OR NO es> AND> OR. Pero esto no parece funcionar de manera similar en Python. Intenté buscarlo en la documentación de Python y fallé (supongo que estoy un poco impaciente). ¿Alguien puede aclararme esto?
NO es, Y, O, de mayor a menor según la documentación https://docs.python.org/3/reference/expressions.html#operator-precedence
Aquí está la tabla de precedencia completa, la precedencia más baja a la más alta. Una fila tiene la misma precedencia y cadenas de izquierda a derecha
- lambda
- si - else
- o
- y
- no x
- in, not in, is, is not, <, <=,>,> =,! =, ==
- |
- ^
- &
- <<, >>
- +, -
- *, /, //,%
- + x, -x, ~ x
- **
- x [índice], x [índice: índice], x (argumentos ...), x.atributo
- (expresiones ...), [expresiones ...], {clave: valor ...}, {expresiones ...}
EDIT: Tuve la precedencia incorrecta
No hay una buena razón para que Python tenga otra secuencia de prioridad de esos operadores que la bien establecida en casi todos los demás lenguajes de programación, incluido C / C ++.
Puede encontrarlo en The Python Language Reference , parte 6.16 - Precedente de operador, descargable (para la versión actual y empaquetado con toda la demás documentación estándar) desde https://docs.python.org/3/download.html , o léelo en línea aquí: https://docs.python.org/3/reference/expressions.html#operator-precedence https://docs.python.org/3/reference/expressions.html#operator-precedence
Pero todavía hay algo en Python que puede inducir a error: el resultado de andy or
operadores pueden ser diferentes de True
o False
: consulte 6.11 operaciones booleanas en el mismo documento.
Puede hacer la siguiente prueba para descubrir la precedencia de and
y or
.
Primero, pruebe 0 and 0 or 1
en la consola de Python
Si or
une primero, entonces esperaríamos 0
como salida.
En mi consola, 1
es la salida. Significa and
une primero o igual a or
(tal vez las expresiones se evalúan de izquierda a derecha).
Entonces prueba 1 or 0 and 0
.
Si oy se unen de igual forma con el orden de evaluación integrado de izquierda a derecha, entonces deberíamos obtener 0
como salida.
En mi consola, 1
es la salida. Entonces podemos concluir eso and
tiene una prioridad más alta que or
.
not
une más que and
que se une más estrictamente que or
como se indica en la referencia del lenguaje