Pythons logische Operatoren und, oder, und nicht (logische Konjunktion, Disjunktion, Negation)

Geschäft

Python bietet logische Operatoren, um logische (boolesche) Operationen durchzuführen.(and,or,not)
Es wird verwendet, um die Beziehung zwischen mehreren Bedingungen in einer if-Anweisung zu beschreiben.

In diesem Abschnitt werden die folgenden Punkte beschrieben.

  • Kreuzung: and
  • logische Ergänzung: or
  • Verweigerung: not
  • and,or,notVorrang der Operatoren

Darüber hinaus werden die folgenden Punkte als Vorsichtsmaßnahmen erläutert.

  • Logische Operatoren für Objekte eines anderen Typs als bool
  • and,orDiese Rückgabewerte sind nicht unbedingt vom Typ bool.
  • Kurzschluss (Kurzschlussauswertung)

Kreuzung: and

und gibt das logische Produkt von zwei Werten zurück.

print(True and True)
# True

print(True and False)
# False

print(False and True)
# False

print(False and False)
# False

In der Tat wird er oft nicht für wahr oder falsch verwendet, sondern für bedingte Ausdrücke mit Vergleichsoperatoren. Zu Ihrer Information: Die Vergleichsoperatoren sind wie folgt.

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

print(a < 100)
# True

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

und können wie folgt verkettet werden.

print(0 < a < 100)
# True

logische Ergänzung: or

oder gibt das logische ODER der beiden Werte zurück.

print(True or True)
# True

print(True or False)
# True

print(False or True)
# True

print(False or False)
# False

Verweigerung: not

not” gibt die Negation des Wertes zurück; true und false werden vertauscht.

print(not True)
# False

print(not False)
# True

and,or,notVorrang der Operatoren

Die Rangfolge dieser logischen Operatoren ist wie folgt: not ist die höchste.

  1. not
  2. and
  3. or

Im folgenden Beispielcode wird der obige Ausdruck so interpretiert, als wäre er der unten stehende. Da es kein Problem mit zusätzlichen Klammern gibt, ist es vielleicht einfacher, sie in Fällen wie diesem Beispiel deutlich zu beschreiben.

print(True or True and False)
# True

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

Wenn Sie “oder” vor “und” setzen wollen, verwenden Sie Klammern().

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

<,>Diese Vergleichsoperatoren haben sogar einen höheren Vorrang als nicht. Daher sind Klammern nicht für jede Vergleichsoperation erforderlich, wie es im obigen Beispiel der Fall war.

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

In der offiziellen Dokumentation unten finden Sie eine Übersicht über den Vorrang von Operatoren in Python.

Logische Operatoren für Objekte eines anderen Typs als bool

Mit diesen logischen Operatoren werden nicht nur boolsche Typen (wahr, falsch), sondern auch Zahlen, Zeichenketten, Listen usw. als boolsche Werte verarbeitet.

Die folgenden Objekte werden in den logischen Operationen von Python als falsch angesehen.

  • Konstanten, die als falsch definiert sind: None,false
  • Null bei numerischen Typen: 0,0,0j,Decimal(0),Fraction(0, 1)
  • Leere Sequenz oder Sammlung: '',(),[],{},set(),range(0)

Alle anderen Werte werden als wahr angesehen.

Die Funktion bool() kann verwendet werden, um den booleschen Wert eines Objekts zu ermitteln. Beachten Sie, dass die Zeichenkette '0' oder 'False' als wahr angesehen wird.

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

Um '0' oder 'false' in einer Zeichenkette als falsch zu behandeln, verwenden Sie distutils.util.strtobool().

and,orDiese Rückgabewerte sind nicht unbedingt vom Typ bool.

Hier ist ein Beispiel für ein Objekt, das nicht vom Typ bool ist, das das Ergebnis der einzelnen Operatoren für einen numerischen Wert zeigt.

x = 10  # True
y = 0  # False

print(x and y)
# 0

print(x or y)
# 10

print(not x)
# False

Wie Sie aus dem obigen Beispiel ersehen können, geben and und or in Python nicht true oder false vom Typ bool zurück, sondern geben den Wert links oder rechts zurück, je nachdem, ob er true oder false ist. Das Beispiel ist numerisch, aber das Gleiche gilt für andere Typen wie Strings und Listen. Übrigens, not gibt true oder false vom Typ bool zurück.

Die Definitionen der Rückgabewerte von und und oder lauten wie folgt.

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

Wenn die Werte des linken und rechten Ausdrucks getrennt wahr und falsch sind, sind die Rückgabewerte leicht zu verstehen. Sind hingegen beide wahr oder beide falsch, so ist der Rückgabewert je nach Reihenfolge unterschiedlich.

Wenn Sie ihn als bedingten Ausdruck in einer if-Anweisung usw. verwenden, wird das Ergebnis als boolescher Wert gewertet und verarbeitet, so dass Sie sich darüber keine Gedanken machen müssen, aber wenn Sie den Rückgabewert zur weiteren Verarbeitung verwenden, müssen Sie vorsichtig sein.

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

Wenn Sie sie als wahr oder falsch behandeln wollen, können Sie dies wie im letzten Beispiel tun.
bool(x and y)

Die Rückgabewerte von und und oder sind in der folgenden Tabelle zusammengefasst.

xyx and yx or y
truefalseyx
falsetruexy
truetrueyx
falsefalsexy

Kurzschluss (Kurzschlussauswertung)

Wie Sie aus der obigen Tabelle ersehen können, ist der Rückgabewert x unabhängig vom Wert von y, wenn x in x und y falsch ist, oder wenn x in x oder y wahr ist.

In einem solchen Fall wird y nicht ausgewertet.

and,orBeachten Sie, dass, wenn Sie eine Funktion oder Methode auf der rechten Seite dieser Prozesse aufrufen, um eine Verarbeitung durchzuführen, der Prozess je nach dem Ergebnis auf der linken Seite möglicherweise nicht ausgeführt wird.

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