Переглядаючи відповіді на це питання , я виявив, що не розумію власної відповіді.
Я не дуже розумію, як це розбирають. Чому другий приклад повертає помилкове?
>>> 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 повертає Хибність у 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
.