Operadores lógicos de Python y, o, y no (conjunción lógica, disyunción, negación)

Negocio

Python proporciona operadores lógicos para realizar operaciones lógicas (booleanas).(and,or,not)
Se utiliza para describir la relación entre múltiples condiciones en una sentencia if.

Esta sección describe lo siguiente.

  • intersección: and
  • adición lógica: or
  • negación: not
  • and,or,notPrecedencia de los operadores

Además, se explican los siguientes puntos a modo de advertencia.

  • Operadores lógicos para objetos de tipo distinto a bool
  • and,orEstos valores de retorno no son necesariamente de tipo bool.
  • Cortocircuito (evaluación del cortocircuito)

intersección: and

y devuelve el producto lógico de dos valores.

print(True and True)
# True

print(True and False)
# False

print(False and True)
# False

print(False and False)
# False

De hecho, a menudo no se utiliza para verdadero o falso, sino para expresiones condicionales que utilizan operadores de comparación. Para su información, los operadores de comparación son los siguientes.

  • <
  • >
a = 10
print(0 < a)
# True

print(a < 100)
# True

print(0 < a and a < 100)
# True

y se pueden concatenar de la siguiente manera.

print(0 < a < 100)
# True

adición lógica: or

o devuelve el OR lógico de los dos valores.

print(True or True)
# True

print(True or False)
# True

print(False or True)
# True

print(False or False)
# False

negación: not

not» devuelve la negación del valor; true y false se invierten.

print(not True)
# False

print(not False)
# True

and,or,notPrecedencia de los operadores

El orden de precedencia de estos operadores lógicos es el siguiente: not es el más alto.

  1. not
  2. and
  3. or

En el siguiente código de ejemplo, la expresión anterior se interpreta como si fuera la de abajo. Dado que no hay ningún problema con los paréntesis adicionales, puede ser más fácil describirlos claramente en casos como el de este ejemplo.

print(True or True and False)
# True

print(True or (True and False))
# True

Si desea operar o antes de y, utilice paréntesis().

print((True or True) and False)
# False

<,>Estos operadores de comparación tienen una precedencia aún mayor que los no. Por lo tanto, los paréntesis no son necesarios para cada operación de comparación, como era el caso en el ejemplo anterior.

print(0 < a and a < 100)
# True

Consulte la documentación oficial más abajo para ver un resumen de la precedencia de los operadores en Python.

Operadores lógicos para objetos de tipo distinto a bool

Con estos operadores lógicos, no sólo se procesan como valores booleanos los tipos bool (verdadero, falso), sino también números, cadenas, listas, etc.

Los siguientes objetos se consideran falsos en las operaciones lógicas de Python.

  • Constantes definidas como falsas: None,false
  • Cero en los tipos numéricos: 0,0,0j,Decimal(0),Fraction(0, 1)
  • Secuencia o colección vacía: '',(),[],{},set(),range(0)

Todos los demás valores se consideran verdaderos.

La función bool() puede utilizarse para obtener el valor booleano de un objeto. Tenga en cuenta que la cadena '0' o 'False' se considera verdadera.

print(bool(10))
# True

print(bool(0))
# False

print(bool(''))
# False

print(bool('0'))
# True

print(bool('False'))
# True

print(bool([]))
# False

print(bool([False]))
# True

Para manejar '0' o 'false' en una cadena como falso, utilice distutils.util.strtobool().

and,orEstos valores de retorno no son necesariamente de tipo bool.

Aquí hay un ejemplo de un objeto que no es de tipo bool, mostrando el resultado de cada operador sobre un valor numérico.

x = 10  # True
y = 0  # False

print(x and y)
# 0

print(x or y)
# 10

print(not x)
# False

Como puedes ver en el ejemplo anterior, and y or en Python no devuelven verdadero o falso del tipo bool, sino que devuelven el valor de la izquierda o de la derecha según sea verdadero o falso. El ejemplo es numérico, pero lo mismo se aplica a otros tipos como cadenas y listas. Por cierto, not devuelve verdadero o falso de tipo bool.

Las definiciones de los valores de retorno de y y o son las siguientes.

The expression x and y first evaluates x; if x is false, its value is returned; otherwise, y is evaluated and the resulting value is returned.

The expression x or y first evaluates x; if x is true, its value is returned; otherwise, y is evaluated and the resulting value is returned.

6.11. Boolean operations — Expressions — Python 3.10.1 Documentation

Cuando los valores de las expresiones izquierda y derecha son verdaderos y falsos por separado, los valores de retorno son fáciles de entender. En cambio, si ambos son verdaderos o ambos son falsos, el valor de retorno será diferente según el orden.

Si lo utilizas como una expresión condicional en una sentencia if, etc., el resultado se juzga como un valor booleano y se procesa, por lo que no tienes que preocuparte por ello, pero si utilizas el valor de retorno para un procesamiento posterior, tienes que tener cuidado.

x = 10  # True
y = 100  # True

print(x and y)
# 100

print(y and x)
# 10

print(x or y)
# 10

print(y or x)
# 100
x = 0  # False
y = 0.0  # False

print(x and y)
# 0

print(y and x)
# 0.0

print(x or y)
# 0.0

print(y or x)
# 0

print(bool(x and y))
# False

Si quieres tratarlo como verdadero o falso, puedes hacerlo como en el último ejemplo.
bool(x and y)

Los valores de retorno de y y o se resumen en la siguiente tabla.

xyx and yx or y
truefalseyx
falsetruexy
truetrueyx
falsefalsexy

Cortocircuito (evaluación del cortocircuito)

Como puede ver en la tabla anterior, si x es falso en x e y, o si x es verdadero en x o y, el valor de retorno será x independientemente del valor de y.

En este caso, y no se evalúa.

and,orTenga en cuenta que si llama a una función o método en el lado derecho de estos procesos para hacer algún procesamiento, el proceso puede no ser ejecutado dependiendo del resultado en el lado izquierdo.

def test():
    print('function is called')
    return True

print(True and test())
# function is called
# True

print(False and test())
# False

print(True or test())
# True

print(False or test())
# function is called
# True
Copied title and URL