Operadores lóxicos de Python and, or, and not (conxunción lóxica, disxunción, negación)

Negocios

Python proporciona operadores lóxicos para realizar operacións lóxicas (booleanas).(and,or,not)
Utilízase para describir a relación entre varias condicións nunha declaración if.

Esta sección describe o seguinte.

  • intersección:and
  • engadido lóxico:or
  • negación:not
  • and,or,notPreferencia do operador

Ademais, os seguintes puntos explícanse como precaucións.

  • Operadores lóxicos para obxectos de tipo distinto ao bool
  • and,orEstes valores de retorno non son necesariamente de tipo bool.
  • Curtocircuíto (avaliación de curtocircuíto)

intersección:and

e devolve o produto lóxico de dous valores.

print(True and True)
# True

print(True and False)
# False

print(False and True)
# False

print(False and False)
# False

De feito, moitas veces úsase non para verdadeiro ou falso, senón para expresións condicionais mediante operadores de comparación. Para a súa información, os operadores de comparación son os seguintes.

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

print(a < 100)
# True

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

e pódese concatenar do seguinte xeito.

print(0 < a < 100)
# True

engadido lóxico:or

ou devolve o OU lóxico dos dous 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” devolve a negación do valor; verdadeiro e falso invírtense.

print(not True)
# False

print(not False)
# True

and,or,notPreferencia do operador

A orde de precedencia destes operadores lóxicos é a seguinte: non é o máis alto.

  1. not
  2. and
  3. or

No seguinte código de exemplo, a expresión anterior interprétase como se fose a seguinte. Dado que non hai ningún problema con parénteses adicionais, pode ser máis doado describilos claramente en casos como este exemplo.

print(True or True and False)
# True

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

Se quere operar ou antes e, use parénteses().

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

<,>Estes operadores de comparación teñen aínda maior prioridade que non. Polo tanto, as parénteses non son necesarias para cada operación de comparación, como foi o caso do exemplo anterior.

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

Consulte a documentación oficial a continuación para ver un resumo da precedencia do operador en Python.

Operadores lóxicos para obxectos de tipo distinto ao bool

With these logical operators, not only bool types (true, false), but also numbers, strings, lists, etc. are processed as boolean values.

Os seguintes obxectos considéranse falsos nas operacións lóxicas de Python.

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

Todos os demais valores considéranse verdadeiros.

A función bool() pódese usar para obter o valor booleano dun obxecto. Teña en conta que a cadea ‘0’ ou ‘False’ considérase verdadeira.

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 tratar ‘0’ ou ‘false’ nunha cadea como false, use distutils.util.strtobool().

and,orEstes valores de retorno non son necesariamente de tipo bool.

Aquí tes un exemplo dun obxecto que non sexa de tipo bool, que mostra o resultado de cada operador nun valor numérico.

x = 10  # True
y = 0  # False

print(x and y)
# 0

print(x or y)
# 10

print(not x)
# False

Como podes ver no exemplo anterior, e e ou en Python non devolven verdadeiro ou falso de tipo bool, senón que devolven o valor á esquerda ou á dereita dependendo de se é verdadeiro ou falso. O exemplo é numérico, pero o mesmo aplícase a outros tipos, como cadeas e listas. Por certo, non devolve verdadeiro ou falso de tipo bool.

As definicións dos valores de retorno de e e ou son as seguintes.

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

Cando os valores das expresións esquerda e dereita son verdadeiros e falsos por separado, os valores de retorno son fáciles de entender. Por outra banda, se ambos son verdadeiros ou ambos son falsos, o valor de retorno será diferente dependendo da orde.

Se o usas como expresión condicional nunha instrución if, etc., o resultado xulgase como un valor booleano e procesase, polo que non tes que preocuparte por iso, pero se usas o valor de retorno para o procesamento posterior, hai que ter coidado.

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

Se queres tratalo como verdadeiro ou falso, podes facelo como no último exemplo.
bool(x and y)

Os valores de retorno de e e ou resúmense na seguinte táboa.

xyx and yx or y
truefalseyx
falsetruexy
truetrueyx
falsefalsexy

Curtocircuíto (avaliación de curtocircuíto)

Como podes ver na táboa anterior, se x é falso en x e y, ou se x é verdadeiro en x ou y, o valor de retorno será x independentemente do valor de y.

Neste caso, y non se avalía.

and,orTeña en conta que se chama a unha función ou método no lado dereito destes procesos para realizar algún procesamento, é posible que o proceso non se execute dependendo do resultado do lado esquerdo.

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