Pitonovi logični operatorji in, ali in ne (logična konjunkcija, disjunkcija, negacija)

Posel

Python ponuja logične operatorje za izvajanje logičnih (logičnih) operacij.(and,or,not)
Uporablja se za opis razmerja med več pogoji v stavku if.

V tem razdelku je opisano naslednje.

  • križišče: and
  • logično dodajanje: or
  • zanikanje: not
  • and,or,notPrednost operaterja

Poleg tega so kot opozorila pojasnjene naslednje točke.

  • Logični operatorji za predmete tipa, ki ni bool
  • and,orTe vrnjene vrednosti niso nujno tipa bool.
  • Kratek stik (ocena kratkega stika)

križišče: and

in vrne logični produkt dveh vrednosti.

print(True and True)
# True

print(True and False)
# False

print(False and True)
# False

print(False and False)
# False

Pravzaprav se pogosto ne uporablja za true ali false, temveč za pogojne izraze, ki uporabljajo primerjalne operatorje. V vednost so primerjalni operatorji naslednji.

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

print(a < 100)
# True

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

in jih je mogoče povezati na naslednji način.

print(0 < a < 100)
# True

logično dodajanje: or

ali vrne logično OR obeh vrednosti.

print(True or True)
# True

print(True or False)
# True

print(False or True)
# True

print(False or False)
# False

zanikanje: not

not” vrne negacijo vrednosti; vrednosti true in false sta obrnjeni.

print(not True)
# False

print(not False)
# True

and,or,notPrednost operaterja

Vrstni red teh logičnih operatorjev je naslednji: not je najvišji.

  1. not
  2. and
  3. or

V naslednjem vzorcu kode se zgornji izraz interpretira, kot da bi bil spodnji izraz. Ker z dodatnimi oklepaji ni težav, jih je v primerih, kot je ta primer, morda lažje jasno opisati.

print(True or True and False)
# True

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

Če želite uporabiti ali pred in, uporabite oklepaj().

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

<,>Ti primerjalni operatorji imajo še večjo prednost kot drugi. Zato oklepaji niso potrebni za vsako operacijo primerjave, kot je bilo v zgornjem primeru.

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

V spodnji uradni dokumentaciji najdete povzetek prednosti operatorjev v Pythonu.

Logični operatorji za predmete tipa, ki ni bool

S temi logičnimi operatorji se kot logične vrednosti obdelujejo ne le tipi bool (true, false), temveč tudi števila, nizi, seznami itd.

Naslednji predmeti se v Pythonovih logičnih operacijah štejejo za lažne.

  • Konstante, ki so definirane kot false: None,false
  • Nula v številskih vrstah: 0,0,0j,Decimal(0),Fraction(0, 1)
  • Prazno zaporedje ali zbirka: '',(),[],{},set(),range(0)

Vse druge vrednosti veljajo za resnične.

Funkcijo bool() lahko uporabite za pridobitev logične vrednosti predmeta. Upoštevajte, da se niz '0' ali 'False' šteje za true.

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

Če želite '0' ali 'false' v nizu obravnavati kot false, uporabite distutils.util.strtobool().

and,orTe vrnjene vrednosti niso nujno tipa bool.

Tukaj je primer predmeta, ki ni tip bool, ki prikazuje rezultat vsakega operatorja na številski vrednosti.

x = 10  # True
y = 0  # False

print(x and y)
# 0

print(x or y)
# 10

print(not x)
# False

Kot je razvidno iz zgornjega primera, and in or v Pythonu ne vračata true ali false tipa bool, temveč vrneta vrednost na levi ali desni strani, odvisno od tega, ali je true ali false. Primer je številski, vendar enako velja tudi za druge tipe, kot so nizi in seznami. Mimogrede, not vrne true ali false tipa bool.

Opredelitve povratnih vrednosti ukazov and in or so naslednje.

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

Kadar sta vrednosti levega in desnega izraza ločeno true in false, so vrnjene vrednosti lahko razumljive. Po drugi strani pa, če sta oba izraza resnična ali oba neresnična, se vrnjena vrednost razlikuje glede na vrstni red.

Če ga uporabite kot pogojni izraz v stavku if itd., se rezultat oceni kot logična vrednost in se obdela, zato vam zanj ni treba skrbeti, če pa vrnjeno vrednost uporabite za nadaljnjo obdelavo, morate biti previdni.

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

Če ga želite obravnavati kot true ali false, lahko to storite kot v zadnjem primeru.
bool(x and y)

V spodnji tabeli so povzete povratne vrednosti ukazov and in or.

xyx and yx or y
truefalseyx
falsetruexy
truetrueyx
falsefalsexy

Kratek stik (ocena kratkega stika)

Kot je razvidno iz zgornje tabele, če je x false v x in y ali če je x true v x ali y, bo vrnjena vrednost x ne glede na vrednost y.

V takem primeru se y ne ovrednoti.

and,orUpoštevajte, da če na desni strani teh procesov pokličete funkcijo ali metodo za obdelavo, se proces morda ne bo izvedel, odvisno od rezultata na levi strani.

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