Referenzseite: [Einführung in Python] So beurteilen Sie die Authentizität mit der if-Anweisung (True and None)
Ich verwende oft if-Anweisungen in Python, möchte aber gelegentlich None erklären. In der if-Anweisung muss eine Bedingung verglichen werden, und es wird bestimmt, ob die Bedingungsanweisung wahr oder falsch ist. None ist ein Konzept, das False nahe kommt, und Sie können fast an False = None denken. Der Unterschied besteht darin, dass False die Information hat, dass es falsch ist (0), während None bedeutet, dass "dort keine Daten vorhanden sind". Ich denke, es ist schwierig, die Worte allein zu verstehen, deshalb möchte ich ein konkretes Beispiel geben.
Beginnen wir mit einem Beispiel für Richtig und Falsch.
>>> a = 3
>>> if(a > 1):
... print "a > 1"
a > 1
Dies ist ein Programm, das "a> 1" anzeigt, wenn der Wert a größer als 1 ist. In der if-Anweisung wird die Wahrheit von a> 1 beurteilt. Jetzt, wo wir a = 3 haben, ist das Urteil wahr. Der Punkt ist, dass nur beurteilt wird, ob der Urteilssatz wahr oder falsch ist, so dass das Gleiche wie folgt getan werden kann.
>>> if(True):
... print "True"
...
True
>>> if(False):
... print "True"
... else:
... print "False"
...
False
Auf diese Weise wird entschieden, ob die Urteilsaussage wahr oder falsch ist, und am Ende wird sie im Programm als 1 und 0 beurteilt (wahr = 1, falsch = 0).
Stellen wir für alle Fälle sicher, dass True = 1 und False = 0 sind.
>>> print 1+True
2
>>> print 1+False
1
Wie Sie sehen können, entsprechen Wahr und Falsch 1 und Null.
Lassen Sie uns nun über None sprechen, was das Hauptthema ist. Lassen Sie uns die if-Anweisung auf die gleiche Weise beurteilen.
>>> print 1+True
2
>>> print 1+False
1
Bisher scheint man an False = None denken zu können. Als nächstes fügen wir hinzu.
>>> print 1+None
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'int' and 'NoneType'
Hmmm, ich habe hier einen Fehler bekommen. Wie eingangs erwähnt, gibt None an, dass dort keine Daten vorhanden sind, sodass kein Wertbegriff vorhanden ist. Daher können Sie sehen, dass es unmöglich ist, die Werte hinzuzufügen.
Ein Beispiel dafür, wann None angezeigt wird, ist die Verwendung von Objekten vom Typ Wörterbuch. Beispiele für Wörterbuchobjekte sind wie folgt.
test = {"red":"apple","blue":"sky","green":"forest"}
Durch die Verknüpfung von Rot und Apfel können Sie Apfel finden, indem Sie mit dem Schlüsselwort Rot suchen. Die Funktion get ist nützlich, wenn Sie hier eine Stichwortsuche durchführen.
>>> print test.get("red")
apple
Suchen wir nun nach Wörtern (orange), die nicht in diesem Wörterbuch registriert sind.
>>> print test.get("orange")
None
Hier kam keiner ins Spiel. Wie Sie sehen können, wird None verwendet, um nicht vorhandene Daten anzuzeigen. Sie können sehen, dass die Bedeutung ein wenig anders ist als Falsch.
Übrigens ist es möglich, direkt mit test ["Schlüsselwort"] zuzugreifen. Wenn Sie jedoch ein Schlüsselwort verwenden, das nicht vorhanden ist, erhalten Sie einen KeyError, wie unten gezeigt.
>>> print test["orange"]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'orange'
In diesem Fall wird das von Ihnen geschriebene Programm in der Mitte zwangsweise beendet. Es wird daher empfohlen, die Funktion get zu verwenden, die nicht beendet wird.
Bei Verwendung des logischen Vergleichs "Keine" ist entweder "ist" oder "==" in Ordnung.
>>> a = test.get("orange") #Setzen Sie keine in eine
>>> if (a == None): # ==Logischer Vergleich mit
... print "a == None"
a == None
>>> if (a is None): #Logischer Vergleich mit is
... print "a is None"
...
a is None
Beide funktionieren einwandfrei. Um es ganz klar auszudrücken, wird "is" empfohlen. Obwohl dies ein seltener Fall ist, scheint es, dass bei "==" ein Fehler auftreten kann (obwohl der Autor ihn noch nicht gefunden hat). Es wird auch gesagt, dass "ist" in der Ausführungsgeschwindigkeit schneller ist. Das Ergebnis der Messung der Verarbeitungszeit mit dem Timeit-Modul zur Überprüfung wird angezeigt.
>>> timeit.timeit("1 == None", number=10000000)
0.3263418674468994
Was dies bedeutet ist "Es dauerte 0,33 Sekunden, um die Zeit zu messen, die erforderlich war, um" 1 == Keine "10000000 Mal zu vergleichen."
Versuchen Sie auf die gleiche Weise "1 ist keine".
>>> timeit.timeit("1 is None", number=10000000)
0.19225311279296875
Wie Sie diesem Ergebnis entnehmen können, ist die Verarbeitungszeit bei Verwendung um 0,19 / 0,33 bis 60% schneller.
Recommended Posts