Python tillhandahåller logiska operatörer för att utföra logiska (booleska) operationer.(and
,or
,not
)
Det används för att beskriva förhållandet mellan flera villkor i ett if-uttalande.
I det här avsnittet beskrivs följande.
- korsning:
and
- logiskt tillägg:
or
- Förnekande:
not
and
,or
,not
Företräde för operatörer
Dessutom förklaras följande punkter som varningar.
- Logiska operatörer för objekt av annan typ än bool
and
,or
Dessa returvärden är inte nödvändigtvis av typen bool.- Kortslutning (utvärdering av kortslutning)
korsning: and
och returnerar den logiska produkten av två värden.
print(True and True)
# True
print(True and False)
# False
print(False and True)
# False
print(False and False)
# False
Det används ofta inte för sant eller falskt, utan för villkorliga uttryck som använder jämförelseoperatörer. För din information är jämförelseoperatörerna följande.
<
>
a = 10
print(0 < a)
# True
print(a < 100)
# True
print(0 < a and a < 100)
# True
och kan sammanfogas på följande sätt.
print(0 < a < 100)
# True
logiskt tillägg: or
eller återger det logiska OR-värdet av de två värdena.
print(True or True)
# True
print(True or False)
# True
print(False or True)
# True
print(False or False)
# False
Förnekande: not
not” returnerar negationen av värdet; sant och falskt är omvänt.
print(not True)
# False
print(not False)
# True
and,or,notFöreträde för operatörer
Prioritetsordningen för dessa logiska operatörer är följande: not är den högsta.
not
and
or
I följande exempelkod tolkas uttrycket ovan som om det vore det nedan. Eftersom det inte är något problem med extra parenteser kan det vara lättare att tydligt beskriva dem i fall som detta exempel.
print(True or True and False)
# True
print(True or (True and False))
# True
Om du vill använda eller före och använder du parenteser().
print((True or True) and False)
# False
<
,>
Dessa jämförelseoperatörer har ännu högre prioritet än andra. Därför är parenteser inte nödvändiga för varje jämförelseoperation, vilket var fallet i exemplet ovan.
print(0 < a and a < 100)
# True
I den officiella dokumentationen nedan finns en sammanfattning av operatörernas företräde i Python.
Logiska operatörer för objekt av annan typ än bool
Med dessa logiska operatörer behandlas inte bara booltyper (sant, falskt), utan även siffror, strängar, listor osv. som boolska värden.
Följande objekt betraktas som falska i Pythons logiska operationer.
- Konstanter som definieras som falska:
None
,false
- Noll i numeriska typer:
0
,0
,0j
,Decimal(0)
,Fraction(0, 1)
- Tom sekvens eller samling:
''
,()
,[]
,{}
,set()
,range(0)
Alla andra värden anses vara sanna.
Funktionen bool() kan användas för att få fram det boolska värdet för ett objekt. Observera att strängen ”0” eller ”False” betraktas som sann.
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
För att hantera ”0” eller ”false” i en sträng som falsk, använd distutils.util.strtobool().
and,orDessa returvärden är inte nödvändigtvis av typen bool.
Här är ett exempel på ett annat objekt än en bool-typ som visar resultatet av varje operatör på ett numeriskt värde.
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 exemplet ovan returnerar och och eller i Python inte sant eller falskt av typen bool, utan returnerar värdet till vänster eller höger beroende på om det är sant eller falskt. Exemplet är numeriskt, men samma sak gäller för andra typer som strängar och listor. För övrigt returnerar not sant eller falskt av typen bool.
Definitionerna av returvärdena för och och eller är följande.
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ärdena i de vänstra och högra uttrycken är sanna och falska var för sig är returvärdena lätta att förstå. Om däremot båda är sanna eller falska kommer returvärdet att vara olika beroende på ordningen.
Om du använder det som ett villkorligt uttryck i ett if-uttalande etc. bedöms resultatet som ett boolskt värde och bearbetas, så du behöver inte oroa dig för det, men om du använder returvärdet för vidare bearbetning måste du vara försiktig.
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
Om du vill behandla det som sant eller falskt kan du göra som i det sista exemplet.bool(x and y)
Returvärdena för och och eller sammanfattas i tabellen nedan.
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 (utvärdering av kortslutning)
Som du kan se i tabellen ovan, om x är falskt i x och y, eller om x är sant i x eller y, kommer returvärdet att vara x oavsett värdet på y.
I ett sådant fall utvärderas inte y.
and
,or
Observera att om du anropar en funktion eller metod på den högra sidan av dessa processer för att utföra en viss bearbetning, kan det hända att processen inte utförs beroende på resultatet på den vänstra sidan.
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