Pythons logiske operatorer og, eller, eller og ikke (logisk konjunktion, disjunktion, negation)

Forretning

Python indeholder logiske operatorer til at udføre logiske (boolske) operationer.(and,or,not)
Det bruges til at beskrive forholdet mellem flere betingelser i en if-erklæring.

Dette afsnit beskriver følgende.

  • kryds: and
  • logisk tilføjelse: or
  • afvisning: not
  • and,or,notForrang for operatører

Desuden er følgende punkter forklaret som advarsler.

  • Logiske operatorer for objekter af anden type end bool
  • and,orDisse returværdier er ikke nødvendigvis af typen bool.
  • Kortslutning (vurdering af kortslutning)

kryds: and

og returnerer det logiske produkt af to værdier.

print(True and True)
# True

print(True and False)
# False

print(False and True)
# False

print(False and False)
# False

Faktisk bruges det ofte ikke til sandt eller falsk, men til betingede udtryk med sammenligningsoperatorer. Til din information er sammenligningsoperatorerne følgende.

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

print(a < 100)
# True

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

og kan sammenkædes på følgende måde.

print(0 < a < 100)
# True

logisk tilføjelse: or

eller returnerer den logiske OR af de to værdier.

print(True or True)
# True

print(True or False)
# True

print(False or True)
# True

print(False or False)
# False

afvisning: not

not” returnerer negationen af værdien; sand og falsk er omvendt.

print(not True)
# False

print(not False)
# True

and,or,notForrang for operatører

Disse logiske operatorer har følgende rækkefølge: not er den højeste.

  1. not
  2. and
  3. or

I den følgende kodeeksempel fortolkes ovenstående udtryk som om det var nedenstående. Da der ikke er noget problem med ekstra parenteser, kan det være lettere at beskrive dem tydeligt i tilfælde som dette eksempel.

print(True or True and False)
# True

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

Hvis du vil sætte eller foran og, skal du bruge parenteser().

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

<,>Disse sammenligningsoperatorer har endnu højere prioritet end ikke. Derfor er parenteser ikke nødvendige for hver sammenligningsoperation, som det var tilfældet i eksemplet ovenfor.

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

Se den officielle dokumentation nedenfor for en oversigt over operatorpræcedens i Python.

Logiske operatorer for objekter af anden type end bool

Med disse logiske operatorer kan ikke kun bool-typer (sand, falsk), men også tal, strenge, lister osv. behandles som boolske værdier.

Følgende objekter anses for at være falske i Pythons logiske operationer.

  • Konstanter, der er defineret til at være falske: None,false
  • Nul i numeriske typer: 0,0,0j,Decimal(0),Fraction(0, 1)
  • Tomme sekvenser eller samlinger: '',(),[],{},set(),range(0)

Alle andre værdier anses for at være sande.

Funktionen bool() kan bruges til at få den boolske værdi af et objekt. Bemærk, at strengen “0” eller “False” betragtes som sand.

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

Hvis du vil håndtere '0' eller 'false' i en streng som falsk, skal du bruge distutils.util.strtobool().

and,orDisse returværdier er ikke nødvendigvis af typen bool.

Her er et eksempel på et andet objekt end en bool-type, der viser resultatet af hver operatør på en numerisk værdi.

x = 10  # True
y = 0  # False

print(x and y)
# 0

print(x or y)
# 10

print(not x)
# False

Som du kan se i eksemplet ovenfor, returnerer og og og eller i Python ikke sandt eller falsk af typen bool, men returnerer værdien til venstre eller højre, afhængigt af om den er sand eller falsk. Eksemplet er numerisk, men det samme gælder for andre typer som strings og lister. I øvrigt returnerer not true eller false af typen bool.

Definitionerne af returværdierne for og og eller er som følger.

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

Når værdierne i det venstre og højre udtryk er sandt og falsk hver for sig, er returværdierne lette at forstå. Hvis derimod begge er sande eller falske, vil returværdien være forskellig alt efter rækkefølgen.

Hvis du bruger det som et betinget udtryk i en if-erklæring osv., vurderes resultatet som en boolsk værdi og behandles, så du behøver ikke at bekymre dig om det, men hvis du bruger returværdien til yderligere behandling, skal du være forsigtig.

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

Hvis du ønsker at behandle det som sandt eller falsk, kan du gøre som i det sidste eksempel.
bool(x and y)

Returværdierne for og og eller er opsummeret i nedenstående tabel.

xyx and yx or y
truefalseyx
falsetruexy
truetrueyx
falsefalsexy

Kortslutning (vurdering af kortslutning)

Som du kan se i tabellen ovenfor, vil returværdien være x uanset værdien af y, hvis x er falsk i x og y, eller hvis x er sandt i x eller y.

I et sådant tilfælde evalueres y ikke.

and,orBemærk, at hvis du kalder en funktion eller metode på højre side af disse processer for at udføre en behandling, kan det være, at processen ikke udføres, afhængigt af resultatet på venstre side.

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