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