110

では動作するが動作しない式で、かなり予期しない動作==が発生しisます。

>>> (True == False) is False
True
>>> True == (False is False)
True
>>> True == False is False
False
>>> id(True)
8978640
>>> id(False)
8978192
>>> id(True == False)
8978192
>>> id(False is False)
8978640
4

4 に答える 4

188

実際、それは連鎖比較なので、

True == False is False

と同等です

(True == False) and (False is False)

この場合、これは驚くべきことですが、1 <= x < 4C のような他の言語とは違って書くことができます。

于 2013-06-19T22:11:13.147 に答える
9

ドキュメントから:

5.9. 比較

C とは異なり、Python のすべての比較演算は同じ優先度を持ち、算術演算、シフト演算、またはビットごとの演算よりも低くなります。また、C とは異なり、a < b < c のような式には、数学の慣習的な解釈があります。

comparison    ::=  or_expr ( comp_operator or_expr )*
comp_operator ::=  "<" | ">" | "==" | ">=" | "<=" | "<>" | "!="
                   | "is" ["not"] | ["not"] "in"
于 2013-06-19T22:11:30.483 に答える
4

True == False is Falseは連鎖比較であり、 と同じ意味(True == False) and (False is False)です。最初の比較 ( True==False) が false であるため、連鎖比較の結果は false になります。

于 2013-06-19T22:11:14.417 に答える