Operadors lògics de Python i, o, i no (conjunció lògica, disjunció, negació)

Negocis

Python proporciona operadors lògics per realitzar operacions lògiques (booleanes).(and,or,not)
S’utilitza per descriure la relació entre múltiples condicions en una declaració if.

Aquesta secció descriu el següent.

  • intersecció:and
  • complement lògic:or
  • negació:not
  • and,or,notPrecedència de l’operador

A més, els punts següents s’expliquen com a precaucions.

  • Operadors lògics per a objectes de tipus diferent del bool
  • and,orAquests valors de retorn no són necessàriament de tipus bool.
  • Curtcircuit (avaluació de curtcircuit)

intersecció:and

i retorna el producte lògic de dos valors.

print(True and True)
# True

print(True and False)
# False

print(False and True)
# False

print(False and False)
# False

De fet, sovint s’utilitza no per a vertader o fals, sinó per a expressions condicionals que utilitzen operadors de comparació. Per a la vostra informació, els operadors de comparació són els següents.

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

print(a < 100)
# True

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

i es pot concatenar de la següent manera.

print(0 < a < 100)
# True

complement lògic:or

o retorna l’OR lògic dels dos valors.

print(True or True)
# True

print(True or False)
# True

print(False or True)
# True

print(False or False)
# False

negació:not

not” retorna la negació del valor; true i false s’inverteixen.

print(not True)
# False

print(not False)
# True

and,or,notPrecedència de l’operador

L’ordre de preferència d’aquests operadors lògics és el següent: no és el més alt.

  1. not
  2. and
  3. or

En el codi d’exemple següent, l’expressió anterior s’interpreta com si fos la següent. Com que no hi ha cap problema amb els parèntesis addicionals, pot ser més fàcil descriure’ls clarament en casos com aquest exemple.

print(True or True and False)
# True

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

Si voleu operar o abans i, feu servir parèntesis().

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

<,>Aquests operadors de comparació tenen una prioritat encara més gran que no. Per tant, els parèntesis no són necessaris per a cada operació de comparació, com va ser el cas de l’exemple anterior.

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

Consulteu la documentació oficial a continuació per obtenir un resum de la precedència de l’operador a Python.

Operadors lògics per a objectes de tipus diferent del bool

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

Els objectes següents es consideren falsos en les operacions lògiques de Python.

  • Les constants definides com a falses:None,false
  • Zero en tipus numèrics:0,0,0j,Decimal(0),Fraction(0, 1)
  • Seqüència o col·lecció buida:',(),[],{},set(),range(0)

Tots els altres valors es consideren certs.

La funció bool() es pot utilitzar per obtenir el valor booleà d’un objecte. Tingueu en compte que la cadena ‘0’ o ‘False’ es considera vertadera.

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

Per tractar “0” o “fals” en una cadena com a fals, utilitzeu distutils.util.strtobool().

and,orAquests valors de retorn no són necessàriament de tipus bool.

Aquí hi ha un exemple d’un objecte diferent d’un tipus bool, que mostra el resultat de cada operador en un valor numèric.

x = 10  # True
y = 0  # False

print(x and y)
# 0

print(x or y)
# 10

print(not x)
# False

Com podeu veure a l’exemple anterior, i i o en Python no retornen true o false de tipus bool, sinó que retornen el valor a l’esquerra o a la dreta segons si és cert o fals. L’exemple és numèric, però el mateix s’aplica a altres tipus, com ara cadenes i llistes. Per cert, no retorna true o false de tipus bool.

Les definicions dels valors de retorn de i i o són les següents.

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

Quan els valors de les expressions esquerra i dreta són certs i fals per separat, els valors de retorn són fàcils d’entendre. D’altra banda, si tots dos són certs o tots dos són falsos, el valor de retorn serà diferent segons l’ordre.

Si l’utilitzeu com a expressió condicional en una instrucció if, etc., el resultat es jutja com un valor booleà i es processa, de manera que no us haureu de preocupar, però si feu servir el valor de retorn per a un processament posterior, cal anar amb compte.

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 voleu tractar-ho com a vertader o fals, podeu fer com a l’últim exemple.
bool(x and y)

Els valors de retorn de i i o es resumeixen a la taula següent.

xyx and yx or y
truefalseyx
falsetruexy
truetrueyx
falsefalsexy

Curtcircuit (avaluació de curtcircuit)

Com podeu veure a la taula anterior, si x és falsa en x i y, o si x és certa en x o y, el valor de retorn serà x independentment del valor de y.

En aquest cas, y no s’avalua.

and,orTingueu en compte que si truqueu a una funció o mètode a la part dreta d’aquests processos per fer algun processament, és possible que el procés no s’executi depenent del resultat de la part esquerra.

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