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
,not
Forrang for operatører
Desuden er følgende punkter forklaret som advarsler.
- Logiske operatorer for objekter af anden type end bool
and
,or
Disse 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.
not
and
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.
x | y | x and y | x or y |
---|---|---|---|
true | false | y | x |
false | true | x | y |
true | true | y | x |
false | false | x | y |
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
,or
Bemæ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