Ich traf nur die folgenden Hinweise und ist neugierig auf Python Verhalten:Auftrag der Auswertung bei der Prüfung Gleichwertigkeit von booleans
>>> x = 1
>>> x in range(2)
True
>>> type(x in range(2))
<type 'bool'>
>>> x in range(2) == True
False
>>> x in range(2) == False
False
>>> (x in range(2)) == True
True
Insbesondere warum (1 in range(2)) == True
bewertet True
und l in range(2) == True
bewerten zu False
? Es scheint, wie es einige seltsame Reihenfolge der Auswertung Verhalten im letzteren ist, mit der Ausnahme, dass, wenn Sie die Bestellung ausdrücklich falsch machen, können Sie eine TypeError
erhalten:
>>> x in (range(2) == True)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: argument of type 'bool' is not iterable
Für das Protokoll, ich kenne keine Fälle, in denen ich würde x in range(2) == True
anstatt nur x in range (2)
verwenden, würde aber gerne wissen, warum das passiert. Ich habe das auch in Python2.7 und Python3 getestet und das Verhalten ist das gleiche.
Gute Einsicht! Aus irgendeinem Grund hätte ich nie gedacht, dass du dich mit anderen Operatoren "einhängen" kannst. – mdml