2012-03-27 26 views
8

私は最近、この表現つまずいてきました:このPythonの例で演算子バインディングはどのように機能しますか?

True == False in (False,) 

それはFalseに評価され、私は理由を理解していません。 (私には)妥当な可能性

True == (False in (False,)) 

(True == False) in (False,) 

True == FalseFalseあるとFalse in (False,)Trueあるので、両方の私が期待していたとして、Trueに評価されます。 ここで何がうまくいかないのですか?

+7

[なぜ[1 \ [1,0 \] == True)がFalseに評価されるのですか?](http://stackoverflow.com/questions/9284350/why-does-1-in-1 -0-true-evaluate-to-false) – agf

答えて

9

私はこれがPythonの比較演算子連鎖の一角だと考えています。

(True == False) and (False in (False,)) 

評価はFalseとなります。

この現象は、従来の数学表記と一致するように意図された)(例えばx == y == zすべての3つが等しいことを意味し、又は0 <= x < 10xを意味する範囲[0、10です)。しかし、inも比較演算子であり、予期しない動作をします。

+0

私は何が起きているのか見ることができるので、これはPythonでは意味がありますが、in演算子は==とまったく異なる関数を持っています。 – jamylak

+0

'in'は2つの値を見て、2つの値の間の関係に従ってboolを返すという点で他と同じです。 –

+1

さらに、この式は[短絡評価]のために 'False'と評価される' False and True'と似ていることに注意してください(http://en.wikipedia.org/wiki/Short- circuit_evaluation)。 –

関連する問題