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
,not
Preferencia do operador
Ademais, os seguintes puntos explícanse como precaucións.
- Operadores lóxicos para obxectos de tipo distinto ao bool
and
,or
Estes 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.
not
and
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.
x | y | x and y | x or y |
---|---|---|---|
true | false | y | x |
false | true | x | y |
true | true | y | x |
false | false | x | y |
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
,or
Teñ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