Als ich nach Antworten auf diese Frage suchte , stellte ich fest, dass ich meine eigene Antwort nicht verstand.
Ich verstehe nicht wirklich, wie das analysiert wird. Warum gibt das zweite Beispiel False zurück?
>>> 1 in [1,0] # This is expected
True
>>> 1 in [1,0] == True # This is strange
False
>>> (1 in [1,0]) == True # This is what I wanted it to be
True
>>> 1 in ([1,0] == True) # But it's not just a precedence issue!
# It did not raise an exception on the second example.
Traceback (most recent call last):
File "<pyshell#4>", line 1, in <module>
1 in ([1,0] == True)
TypeError: argument of type 'bool' is not iterable
Vielen Dank für jede Hilfe. Ich denke, ich muss etwas wirklich Offensichtliches vermissen.
Ich denke, das unterscheidet sich geringfügig von dem verknüpften Duplikat:
Warum gibt der Ausdruck 0 <0 == 0 in Python False zurück? .
Beide Fragen haben mit dem menschlichen Verständnis des Ausdrucks zu tun. Meiner Meinung nach gab es zwei Möglichkeiten, den Ausdruck zu bewerten. Natürlich waren beide nicht richtig, aber in meinem Beispiel ist die letzte Interpretation unmöglich.
Wenn 0 < 0 == 0
Sie sich das ansehen, können Sie sich vorstellen, dass jede Hälfte bewertet wird und als Ausdruck Sinn ergibt:
>>> (0 < 0) == 0
True
>>> 0 < (0 == 0)
True
Der Link antwortet also, warum dies bewertet wird False
:
>>> 0 < 0 == 0
False
Aber da mein Beispiel 1 in ([1,0] == True)
als Ausdruck keinen Sinn ergibt, scheint anstelle von zwei (zugegebenermaßen falschen) möglichen Interpretationen nur eine möglich zu sein:
>>> (1 in [1,0]) == True
==
Bindung ist enger alsin
, wird also[1,0] == True
zuerst ausgewertet, dann wird das Ergebnis davon eingespeist1 in other_result
.