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
,not
Prednost operaterja
Poleg tega so kot opozorila pojasnjene naslednje točke.
- Logični operatorji za predmete tipa, ki ni bool
and
,or
Te 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.
not
and
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.
x | y | x and y | x or y |
---|---|---|---|
true | false | y | x |
false | true | x | y |
true | true | y | x |
false | false | x | y |
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
,or
Upoš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