Python’s logische operatoren en, of, en niet (logische conjunctie, disjunctie, negatie)

Bedrijf

Python biedt logische operatoren om logische (Booleaanse) bewerkingen uit te voeren.(and,or,not)
Het wordt gebruikt om de relatie tussen meerdere voorwaarden in een if-verklaring te beschrijven.

In dit hoofdstuk wordt het volgende beschreven.

  • kruispunt: and
  • logische toevoeging: or
  • ontkenning: not
  • and,or,notOperator voorrang

Daarnaast worden de volgende punten als waarschuwingen toegelicht.

  • Logische operatoren voor objecten van een ander type dan bool
  • and,orDeze terugkeerwaarden zijn niet noodzakelijk van het type bool.
  • Kortsluiting (evaluatie kortsluiting)

kruispunt: and

en geeft het logische product van twee waarden.

print(True and True)
# True

print(True and False)
# False

print(False and True)
# False

print(False and False)
# False

In feite wordt het vaak niet gebruikt voor waar of onwaar, maar voor voorwaardelijke uitdrukkingen die gebruik maken van vergelijkingsoperatoren. Ter informatie, de vergelijkingsoperatoren zijn als volgt.

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

print(a < 100)
# True

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

en kunnen als volgt aan elkaar worden gekoppeld.

print(0 < a < 100)
# True

logische toevoeging: or

of geeft de logische OF van de twee waarden.

print(True or True)
# True

print(True or False)
# True

print(False or True)
# True

print(False or False)
# False

ontkenning: not

not” geeft de negatie van de waarde terug; waar en onwaar zijn omgedraaid.

print(not True)
# False

print(not False)
# True

and,or,notOperator voorrang

De rangorde van deze logische operatoren is als volgt: niet is de hoogste.

  1. not
  2. and
  3. or

In de volgende voorbeeldcode wordt de bovenstaande uitdrukking geïnterpreteerd alsof het de uitdrukking hieronder is. Aangezien er geen probleem is met extra haakjes, is het misschien gemakkelijker om ze duidelijk te beschrijven in gevallen zoals dit voorbeeld.

print(True or True and False)
# True

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

Als je of voor en wilt zetten, gebruik je haakjes().

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

<,>Deze vergelijkingsoperatoren hebben zelfs een hogere voorrang dan niet. Daarom zijn haakjes niet nodig voor elke vergelijkingsoperatie, zoals het geval was in het bovenstaande voorbeeld.

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

Zie de officiële documentatie hieronder voor een overzicht van operator rangorde in Python.

Logische operatoren voor objecten van een ander type dan bool

Met deze logische operatoren worden niet alleen booltypes (waar, onwaar), maar ook getallen, strings, lijsten, enz. als booleaanse waarden verwerkt.

De volgende objecten worden als onwaar beschouwd in de logische operaties van Python.

  • Constanten gedefinieerd als onwaar: None,false
  • Nul in numerieke typen: 0,0,0j,Decimal(0),Fraction(0, 1)
  • Lege sequentie of verzameling: '',(),[],{},set(),range(0)

Alle andere waarden worden als waar beschouwd.

De functie bool() kan gebruikt worden om de booleaanse waarde van een object te verkrijgen. Merk op dat de string '0' of 'False' als waar wordt beschouwd.

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

Om '0' of 'false' in een string als false te behandelen, gebruik je distutils.util.strtobool().

and,orDeze terugkeerwaarden zijn niet noodzakelijk van het type bool.

Hier is een voorbeeld van een object van een ander type dan een bool, met het resultaat van elke operator op een numerieke waarde.

x = 10  # True
y = 0  # False

print(x and y)
# 0

print(x or y)
# 10

print(not x)
# False

Zoals je kan zien in het voorbeeld hierboven, geven en en of in Python niet waar of onwaar terug van het type bool, maar geven de waarde links of rechts terug, afhankelijk van of het waar of onwaar is. Het voorbeeld is numeriek, maar hetzelfde geldt voor andere types zoals strings en lijsten. Overigens, not geeft true of false terug van het type bool.

De definities van de terugkeerwaarden van en en of zijn als volgt.

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

Indien de waarden van de linker en rechter expressie afzonderlijk waar en onwaar zijn, zijn de returnwaarden gemakkelijk te begrijpen. Anderzijds, indien beide waar of beide onwaar zijn, zal de terugkeerwaarde verschillend zijn afhankelijk van de volgorde.

Als je het gebruikt als een voorwaardelijke uitdrukking in een if statement, enz., wordt het resultaat beoordeeld als een boolean waarde en verwerkt, dus je hoeft je er geen zorgen over te maken, maar als je de retourwaarde gebruikt voor verdere verwerking, moet je voorzichtig zijn.

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

Als u het als waar of onwaar wilt behandelen, kunt u dat doen zoals in het laatste voorbeeld.
bool(x and y)

De terugkeerwaarden van en en of zijn samengevat in de onderstaande tabel.

xyx and yx or y
truefalseyx
falsetruexy
truetrueyx
falsefalsexy

Kortsluiting (evaluatie kortsluiting)

Zoals u in de tabel hierboven kunt zien, als x onwaar is in x en y, of als x waar is in x of y, zal de terugkeerwaarde x zijn, ongeacht de waarde van y.

In zo'n geval wordt y niet geëvalueerd.

and,orMerk op dat als je een functie of methode aanroept aan de rechterkant van deze processen om een bepaalde verwerking te doen, het proces mogelijk niet wordt uitgevoerd, afhankelijk van het resultaat aan de linkerkant.

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