Когда я смотрел ответы на этот вопрос, я обнаружил, что не понял свой собственный ответ.
Я действительно не понимаю, как это разбирается. Почему второй пример возвращает False?
>>> 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 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
Спасибо за любую помощь. Я думаю, что я должен упустить что-то действительно очевидное.
Я думаю, что это немного отличается от связанного дубликата:
Почему выражение 0 < 0 == 0 return False в Python?.
Оба вопроса связаны с пониманием человеком выражения. Кажется, есть два способа (по моему мнению) оценки выражения. Конечно, ни один из них не был правильным, но в моем примере последняя интерпретация невозможна.
Взглянув на 0 < 0 == 0
, вы можете представить, что каждая половина оценивается и делает смысл в качестве выражения:
>>> (0 < 0) == 0
True
>>> 0 < (0 == 0)
True
Итак, ссылка отвечает, почему это оценивает False
:
>>> 0 < 0 == 0
False
Но мой пример 1 in ([1,0] == True)
не имеет смысла как выражение, поэтому вместо наличия двух (по общему признанию, неправильных) возможных интерпретаций возможно только одно:
>>> (1 in [1,0]) == True