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
,not
Vorrang 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
,or
Diese 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.
not
and
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.
x | y | x and y | x or y |
---|---|---|---|
true | false | y | x |
false | true | x | y |
true | true | y | x |
false | false | x | y |
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
,or
Beachten 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