Python bietet boolesche Operatoren und, oder, nicht. Exemplar werden sie used, um mehrere Bedingungen in der if-Anweisung zu behandeln.
Dieser Artikel hat folgenden Inhalt.
- und (logische Konjunktion)
- oder (Logische Disjunktion)
- nicht (Verneinung)
- Vorrang von and, or, not-Operatoren
- Boolesche Operationen für Objekte, die nicht vom Typ bool sind
- and,or gibt NICHT immer den Typ bool zurück
- Kurzschlussauswertung
Im following Artikel finden SIE bitweise Operationen für jedes Bit einer Ganzzahl anstelle von booleschen Operationen von True und False. Verwenden Sie & und | statt und oder.
Siehe den following Artikel für die if-Anweisung.
und (logische Konjunktion)
und gibt die logische Verknüpfung zweier Werte zurück.
print(True and True)
# True
print(True and False)
# False
print(False and True)
# False
print(False and False)
# False
In der Praxis wird es oft für bedingte Ausdrücke mit Vergleichsoperatoren (<, > usw.) verwendet und nicht für True, False. Dasselbe gilt für oder und nicht später beschrieben.
a = 10
print(0 < a)
# True
print(a < 100)
# True
print(0 < a and a < 100)
# True
Mehrfachvergleiche können wie folgt verkettet werden.
print(0 < a < 100)
# True
oder (Logische Disjunktion)
oder gibt die logische Disjunktion zweier Werte zurück.
print(True or True)
# True
print(True or False)
# True
print(False or True)
# True
print(False or False)
# False
nicht (Verneinung)
nicht gibt die Negation des Werts zurück. True und False werden vertauscht.
print(not True)
# False
print(not False)
# True
Vorrang von and, or, not-Operatoren
Die Priorität boolescher Operatoren ist nicht > und > oder (not ist die höchste Priorität).
Im following Beispielcode WIRD der erste Ausdruck als letzterer betrachtet.
Es spielt keine Rolle, ob zusätzliche Klammern () vorhanden sind. In Fällen wie diesem Beispiel can sterben Klammern das Verständnis der Bedeutung des Ausdruckserleichterung.
print(True or True and False)
# True
print(True or (True and False))
# True
Wenn Sie oder vor und berechnen möchten, verwenden Sie Klammern () für oder.
print((True or True) and False)
# False
Vergleichsoperatoren wie <, > haben eine höhere Priorität als not, und, oder, daher sind Klammern () nicht für jeden Vergleich erforderlich, wie im Beispielbeispiel.
print(0 < a and a < 100)
# True
In der offiziellen Dokumentation unten finden Sie eine Zusammenfassung der Operatorpriorität in Python.
Boolesche Operationen für Objekte, die nicht vom Typ bool sind
Die boolschen Operatoren and, or verarbeiten nicht nur boolsche Typen (True, False), sondern auch Zahlen, Strings, Listen usw.
In Python werden die following Objekte in booleschen Operationen als falsch betrachtet.
- als falsch definierte Konstanten:
None and False
- Null eines beliebigen numerischen Typs:
0, 0.0, 0j, Decimal(0), Fraction(0, 1)
- leere Sequenzen und Sammlungen:
'', (), [], {}, set(), range(0)
Alles andere gilt als wahr.
Sie können den booleschen Wert eines Objekts mit der Funktion bool() erhalten. Beachten Sie, dass die Buchstaben „0“ und „False“ als wahr betrachtet werden.
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
Verwenden Sie distutils.util.strtobool(), um die Zeichenfolgen „0“ und „False“ als falsch zu behandeln. Siehe folgenden Artikel.
and, or gibt NICHT immer den Typ bool zurück
und, oder und nicht für ganze Zahlen:
x = 10 # True
y = 0 # False
print(x and y)
# 0
print(x or y)
# 10
print(not x)
# False
Wie SIE dem Beispiel entnehmen können, gibt es in Python und und oder nicht bool (True,False) zurück, sondern linke oder rechte Werte. not gibt bool (True, False) zurück.
Das Gleiche gilt für andere Typen wie Strings, Listen usw.
Die Definitionen der Rückgabewerte von und und oder lauten wie folgt.
Der Ausdruck x und y wertet zuerst x aus; wenn x falsch ist, wird sein Wert zurückgegeben; andersfalls wird y ausgewertet und der resultierende Wert zurückerstattet.
Der Ausdruck x oder y wertet zuerst x aus; wenn x wahr ist, wird sein Wert zurückgegeben; andersfalls wird y ausgewertet und der resultierende Wert zurückerstattet.
6. Ausdrücke – Dokumentation zu Python 3.9.1
Wenn die Werte links und rechts wahr und falsch sind, ist der Rückgabewert leicht zu verstehen, aber wenn beide wahr oder beide falsch sind, unterscheidet sich der Rückgabewert je nach Reihenfolge.
Bei Verwendung als bedingter Ausdruck in einer if-Anweisung WIRD das Ergebnis als boolescher Wert getestet, sodass Sie sich darüber keine Gedanken machen müssen, aber seien Sie vorsichtig, wenn Sie den Rückgabewert in fortlaufenden Operationen verwenden.
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
If SIE das Ergebnis als True oder False erhalten möchten, verwenden SIE bool() wie im letzten Beispiel.
Die Rückgabewerte von und und oder sind in der folgenden Tabelle zusammengefasst.
x | j | x und y | x oder y |
---|---|---|---|
Stimmt | FALSCH | j | x |
FALSCH | Stimmt | x | j |
Stimmt | Stimmt | j | x |
FALSCH | FALSCH | x | j |
Kurzschlussauswertung
Wie SIE der obigen Tabelle entnehmen können, ist der Rückgabewert immer x, wenn x in x und y falsch ist oder wenn x in x oder y wahr ist. In solchen Fällen wird y nicht extrahiert.
Beachten Sie, dass, wenn SIE eine Funktion oder Methode auf der rechten Seite von und und oder aufrufen, diese abhängig vom Ergebnis auf der linken Seite möglicherweise nicht ausgeführt werden.
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