この質問 の答えを見ていたとき、自分の答えが理解できませんでした。
これがどのように解析されているのか、私にはよくわかりません。 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
_
助けてくれてありがとう。私は本当に明白な何かを見逃しているに違いないと思います。
これはリンクされた複製とは微妙に異なると思います:
式0 <0 == 0がPythonで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は実際にここで比較演算子チェーンを適用します。式は次のように翻訳されます
(1 in [1, 0]) and ([1, 0] == True)
明らかにFalse
です。
これは、次のような式でも発生します
a < b < c
これは
(a < b) and (b < c)
(b
を2回評価せずに)。
詳細は Python言語のドキュメント を参照してください。