2016-07-29 10 views
21

これは私を困惑させます。でも、優先順位を知らなくても、人は表現を収集するには、2つの可能な方法はFalseを与えることを確認することができます。0は0 == 0です(#evaluates to True?)

>>> (0 is 0) == 0 
False 
>>> 0 is (0 == 0) 
False 

しかし

>>> 0 is 0 == 0 
True 

はどのように来ますか?

+10

これはdupeでなければならないが、 'a == b == c'と同じように、' 0は0 == 0'が '(0は0)と(0 == 0)'として解析される'a == bとb == c'。 –

+0

@PaulHankinあなたはそれを残しておく必要があります –

+0

この記事をチェックしてください:[Pythonの "理解"演算子](http://stackoverflow.com/questions/13650293/understanding-pythons-is-operator) –

答えて

5

比較演算子をPythonで連鎖するとき、演算子は他の演算子の結果に実際には適用されませんが、個々に演算子に適用されます。つまり、x ? y ?? z???はいくつかの比較演算子に使用されるはずです)は(x ? y) ?? zでもx ? (y ?? z)でもなく、x ? y and y ?? zです。

これはmin < x < maxなどの文章を書くことができ、ブール値と数値(他のほとんどの言語では起こり得る)を比較するのではなく、あなたが望むようにすることができます。

19

比較演算子チェーンを使用しています。 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です。

関連する問題