2012-03-27 2 views
8

나는 최근에이 표현을 통해 발견했습니다. True == FalseFalseFalse in (False,)True입니다, 그래서 내가 기대 한 것처럼 그럴듯 가능성 이 파이썬 예제에서 연산자 바인딩은 어떻게 작동합니까?</p>이 <pre><code>True == False in (False,) </code></pre> <p>그것은 <code>False</code>로 평가하지만 난 왜 이해가 안 :

True == (False in (False,)) 

(True == False) in (False,) 

(나에게) 모두, True로 평가. 여기에 무슨 문제가 있습니까?

+7

[왜 (1 \ [1,0 \] == True)가 False로 평가됩니까?] (http://stackoverflow.com/questions/9284350/why-does-1-in-1) -0- true-evaluate-to-false) – agf

답변

9

저는 이것이 파이썬의 비교 연산자 연쇄의 모범 사례라고 생각합니다.

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

False으로 평가됩니다.

이 동작은 종래의 수학 기호와 일치하도록 의도되었다) (예를 들어 x == y == z 셋 모두 동일한 의미 또는 0 <= x < 10x 의미하는 범위 [0, 10이다). 그러나 in도 비교 연산자이므로 예기치 않은 동작이 발생합니다.

+0

무슨 일이 일어나고 있는지는 알 수 있지만 in 연산자는 ==와 완전히 다른 함수를 가지고 있기 때문에 파이썬에서 이해가 되나? – jamylak

+0

'in'은 두 값을 살펴보고 두 값 사이의 관계에 따라 bool을 반환한다는 점에서 다른 점과 같습니다. –

+1

또한,이 표현은 [단락 회로 평가]로 인해 '거짓'으로 평가되는 '거짓 및 참'과 유사하다 (http://en.wikipedia.org/wiki/Short- circuit_evaluation). –