Python oder und und Operatorfalle

Normalerweise in ProgrammiersprachenorWannand (Oder||Wann&&Ähnliche Ausdrücke wie)Ist(Punkt 2)Es bedeutet eine logische Operation. Das heißt, der von oder oder und zurückgegebene Wert ist der Bool-Wert (True / False). In Sprachen der C-Serie wird True / False manchmal durch 1/0 ersetzt, aber trotzdem geben die logischen Operationen oder und und die Werte zurück, die den logischen Werten entsprechen. In Python geben oder und und jedoch nicht immer logische Werte zurück. In Python entsprechen die Ausdrücke "x" und "y":

if not bool(x):  #Wenn der logische Wert von x False ist
    return x  #Geben Sie x selbst anstelle von False zurück, ohne y zu sehen
else:  #Wenn der logische Wert von x True ist
    return y  # bool(y)Nicht zurückgeben

In ähnlicher Weise ist der Ausdruck "x oder y" äquivalent zu:

if bool(x):  #Wenn der logische Wert von x True ist
    return x  #Geben Sie x selbst anstelle von True zurück, ohne y zu sehen
else:  #Wenn der logische Wert von x False ist
    return y  # bool(y)Nicht zurückgeben

Wenn in Python der logische Wert einer Zeichenfolge mit der Länge 0 "False" und der logische Wert einer Zeichenfolge mit der Länge 1 oder höher "True" ist, kann dies wie folgt zusammengefasst werden:

'123' or '456'  -> '123'  # bool('123')Ist wahr, also der Wert'123'Rückkehr
'123' or ''     -> '123'  # bool('123')Ist wahr, also der Wert'123'Rückkehr
''    or '456'  -> '456'  # bool('')Ist falsch, also Wert'456'Rückkehr
''    or ''     -> ''     # bool('')Ist falsch, also Wert''Rückkehr
'123' and '456' -> '456'  # bool('123')Ist wahr, also Wert'456'Rückkehr
'123' and ''    -> ''     # bool('123')Ist wahr, also Wert''Rückkehr
''    and '456' -> ''     # bool('')Ist falsch, so der Wert''Rückkehr
''    and ''    -> ''     # bool('')Ist falsch, so der Wert''Rückkehr

Im obigen Beispiel wird ** True / False überhaupt nicht zurückgegeben, obwohl es das Ergebnis von or und and ** ist. Wenn Sie sicherstellen möchten, dass der von den binären logischen Operatoren (oder und und) in Python zurückgegebene Wert immer der logische Wert "True / False", "bool (x) oder bool (y)" oder "bool" ist Muss (x) und bool (y) sein (obwohl "bool (x oder y)", "bool (x und y)" in Ordnung ist). Normalerweise übergeben Sie keinen anderen Wert als den logischen Wert "True / False" als "x" oder "y", aber er wird manchmal vergessen, weil "bool (x)" automatisch ausgewertet wird. Der Grund, warum dies geschieht, ist, dass oft gesagt wird, dass die Handhabung von "Keine" bequem ist. In Python ist der logische Wert von "None" "False" ("bool (None) -> False"), also der folgende Code

#Ich weiß nicht, ob x None enthält
if x is None:
    x = '456'
# x = '456'Ich kann schreiben, wenn x None ist, aber ich persönlich mag es nicht

Kann durch ** x = x oder '456' ** ersetzt werden. Es ist jedoch nicht ** äquivalent **. Das Verhalten, wenn eine leere Zeichenfolge "" oder eine leere Liste "[]" in "x" gespeichert wird, ist unterschiedlich. Wenn x``'' oder[]enthält, sind sowohl x is None als auch bool (x )`` False. Daher wird im Fall von Code, der "is None" verwendet, "x" nicht neu zugewiesen. Im Fall von Code, der "x" oder "456" verwendet, wird "456" "x" zugewiesen.

Warten Sie, was passiert mit "wenn x oder y:"?

Wenn "oder" keinen logischen Wert zurückgibt, haben Sie dann "x" oder "y" in "if" verwendet? Nein, es hat unweigerlich funktioniert, nicht aus Versehen. In Python wird der Wahrheitswert des bedingten Ausdrucks "if" ohne Erlaubnis bestimmt. Mit anderen Worten, dasselbe wie "wenn bool (x oder y):" wird ohne Erlaubnis durchgeführt.

Recommended Posts

Python oder und und Operatorfalle
Python-Bitoperator und logische Summe
[Python] Der Boolesche Operator (oder / und) gibt keinen Booleschen Wert zurück
[Python] gibt A [oder / und] B zurück
[Python] Verwenden Sie und und oder beim Erstellen von Variablen
Verbinde viel Python oder und und
Python 3-Operator-Memo
Trinity-Operator (Python)
Nicht logische Operatorverwendung von oder in Python
[Einführung in Python] Verwendung des Booleschen Operators (und ・ oder ・ nicht)
[Python] Komprimieren und dekomprimieren
Python> Liste> verlängern () oder + =
Python-Standardargumentfalle
Python Iterator und Generator
Python aus oder importieren
Python Autotest oder Sniffer
Python-Pakete und -Module
Vue-Cli- und Python-Integration
Ruby, Python und Map
Python-Eingabe und Ausgabe
Memorandum @ Python ODER Seminar
Python asyncio und ContextVar
Informationen zur Überlastungspriorität des Python-Operators
[Python] Kapitel 05-01 Steuerungssyntax (Vergleichsoperator und bedingte Verzweigung)
Python-Memo mit perl-ternärem Operator
Ver- und Entschlüsselung mit Python
3-3, Python-Zeichenfolge und Zeichencode
Python 2-Serie und 3-Serie (Anaconda Edition)
Python und Hardware-Verwenden von RS232C mit Python-
Python auf Ruby und wütend Ruby auf Python
Python-Einzug und String-Format
Python Real Number Division (/) und Integer Division (//)
Python 3.4 oder höher Standard Pip
Å (Ongustorome) und NFC @ Python
Lernen Sie Python-Pakete und -Module kennen
# 2 [python3] Trennung und Kommentar aus
Flache Python-Kopie und tiefe Kopie
Python und Ruby Slice Memo
Python-Installation und grundlegende Grammatik
Listenverkettungsmethode in Python, Unterschied zwischen list.extend () und dem Operator "+"
Ich habe Java und Python verglichen!
Flache Python-Kopie und tiefe Kopie
Über Python, len () und randint ()
Informationen zu Python-Datums- und Zeitzone
Installieren Sie Python 3.7 und Django 3.0 (CentOS)
Python-Umgebungskonstruktion und TensorFlow
Python-Klassen- und Instanzvariablen
Ruby- und Python-Syntax ~ branch ~
[Python] Python und Sicherheit - is Was ist Python?
Memorandum @ Python ODER Seminar: Pulp
Stapel und Warteschlange in Python
Implementierung von Fibonacci und Primzahlen (Python)
Python-Grundlagen: Bedingungen und Iterationen
Python-Debug- und Testmodul
Python-Liste und Tapples und Kommas
Python-Variablen und Objekt-IDs
Memorandum @ Python ODER Seminar: Pandas
Python-Listeneinschlussnotation und Generator
Über Python und reguläre Ausdrücke