Verkettete Vergleiche in Python: Das Geheimnis von 0 < lüften 0 == 0 Falschheit
In den Tiefen des Standardbibliothekscodes von Python liegt ein rätselhaftes Konstrukt in Queue.py aus Python 2.6:
def full(self): """Return True if the queue is full, False otherwise (not reliable!).""" self.mutex.acquire() n = 0 < self.maxsize == self._qsize() self.mutex.release() return n
Warum ist dieser Ausdruck 0 < 0 == 0, Ausbeute Falsch? Auf den ersten Blick scheint es kontraintuitiv, da 0 eindeutig kleiner als 0 ist und 0 == 0 wahr ist.
Verkettete Vergleiche: Pythons Verknüpfung
Python hat eine einzigartige Funktion namens „verkettete Vergleiche“, die die Darstellung von Bereichsvergleichen prägnanter macht. Folgendes entspricht beispielsweise der Verwendung verketteter Vergleiche:
0 < x <= 5
Intern werden diese verketteten Vergleiche unterschiedlich interpretiert. Python wertet den Ausdruck von links nach rechts aus und gibt den Wert des ersten Vergleichs zurück, der „False“ ergibt. In unserem Fall ist 0 < 0 ergibt Falsch, daher ist die nachfolgende == 0-Auswertung irrelevant und der Ausdruck gibt daher Falsch zurück.
Wenn dagegen Klammern eingeführt werden, erzwingen sie, dass die Auswertung des darin enthaltenen Ausdrucks vor der nächsten abgeschlossen wird Vergleich angewendet wird. Dies negiert das verkettete Vergleichsverhalten. Als Ergebnis erhalten wir die erwarteten True-Werte, wenn Klammern hinzugefügt werden:
(0 < 0) == 0 0 < (0 == 0)
Daher ist der Ausdruck der Methode full(), 0 < self.maxsize == self._qsize(), ergibt False, wenn self.maxsize 0 ist, was bedeutet, dass die Warteschlange nie voll ist, wenn die Größenbeschränkung auf 0 gesetzt ist.
Das obige ist der detaillierte Inhalt vonWarum wird „0 < 0 == 0' in Python als „Falsch' ausgewertet?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!