simbolos relacionales operadores not incrementales desigual and python python-3.x boolean-expression

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:

  1. or
  2. and
  3. not x
  4. 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

  1. lambda
  2. si - else
  3. o
  4. y
  5. no x
  6. in, not in, is, is not, <, <=,>,> =,! =, ==
  7. |
  8. ^
  9. &
  10. <<, >>
  11. +, -
  12. *, /, //,%
  13. + x, -x, ~ x
  14. **
  15. x [índice], x [índice: índice], x (argumentos ...), x.atributo
  16. (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 .