これは私を困惑させます。でも、優先順位を知らなくても、人は表現を収集するには、2つの可能な方法はFalse
を与えることを確認することができます。0は0 == 0です(#evaluates to True?)
>>> (0 is 0) == 0
False
>>> 0 is (0 == 0)
False
しかし
>>> 0 is 0 == 0
True
はどのように来ますか?
これは私を困惑させます。でも、優先順位を知らなくても、人は表現を収集するには、2つの可能な方法はFalse
を与えることを確認することができます。0は0 == 0です(#evaluates to True?)
>>> (0 is 0) == 0
False
>>> 0 is (0 == 0)
False
しかし
>>> 0 is 0 == 0
True
はどのように来ますか?
比較演算子をPythonで連鎖するとき、演算子は他の演算子の結果に実際には適用されませんが、個々に演算子に適用されます。つまり、x ? y ?? z
(?
と??
はいくつかの比較演算子に使用されるはずです)は(x ? y) ?? z
でもx ? (y ?? z)
でもなく、x ? y and y ?? z
です。
これはmin < x < max
などの文章を書くことができ、ブール値と数値(他のほとんどの言語では起こり得る)を比較するのではなく、あなたが望むようにすることができます。
比較演算子チェーンを使用しています。 Comparisons documentationから
(0 is 0) and (0 == 0)
:表現は次のように解釈され
比較は例えば、
x < y <= z
は一度だけ評価されることy
除き、x < y and y <= z
に相当し、任意の連鎖(ただし、どちらの場合もz
ですることができますx < y
が偽であると判明した場合は全く評価されない)。 Python interns small integers、実装の詳細、あなたが得るよう(True) and (True)
がTrue
を生産するため
0 is 0
はtrueです。
これはdupeでなければならないが、 'a == b == c'と同じように、' 0は0 == 0'が '(0は0)と(0 == 0)'として解析される'a == bとb == c'。 –
@PaulHankinあなたはそれを残しておく必要があります –
この記事をチェックしてください:[Pythonの "理解"演算子](http://stackoverflow.com/questions/13650293/understanding-pythons-is-operator) –