Pythons logiska operatorer och, eller och inte (logisk konjunktion, disjunktion, negation).

Företag

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,notFö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,orDessa 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.

  1. not
  2. and
  3. 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.

xyx and yx or y
truefalseyx
falsetruexy
truetrueyx
falsefalsexy

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,orObservera 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
Copied title and URL