この質問の答えを見ていたとき、自分の答えが理解できませんでした。
これがどのように解析されるのか、私にはよくわかりません。2番目の例が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
助けてくれてありがとう。私は本当に明白な何かを見逃しているに違いないと思います。
これはリンクされた複製とは微妙に異なると思います:
Pythonで式0 <0 == 0がFalseを返すのはなぜですか?。
どちらの質問も、人間の表現の理解に関係しています。表現を評価するには2つの方法(私の考えでは)があるようです。もちろんどちらも正しくありませんでしたが、私の例では、最後の解釈は不可能です。
見てみると、0 < 0 == 0
各半分が評価され、式として意味を成していることが想像できます。
>>> (0 < 0) == 0
True
>>> 0 < (0 == 0)
True
だからリンクはこれがなぜ評価されるのか答えますFalse
:
>>> 0 < 0 == 0
False
しかし、私の例で1 in ([1,0] == True)
は式として意味をなさないので、2つの(確かに間違っている)可能な解釈があるのではなく、1つだけが可能であると思われます。
>>> (1 in [1,0]) == True
Python 3.2は同じように動作するため、Python-2.7タグを削除しました。
—
lvc
@マークB:2番目の表現を説明しない
—
スコットハンター
@MarcB、質問には括弧を使用してその解釈を反証するテストが含まれていました。
—
Mark Ransom
==
バインドはよりも強いin
ため[1,0] == True
、最初に評価され、次にその結果がに渡され1 in other_result
ます。