([1,0] == True의 1)이 False로 평가되는 이유는 무엇입니까?


153

이 질문 에 대한 답변을 볼 때 내 답변을 이해하지 못하는 것으로 나타났습니다.

나는 이것이 어떻게 파싱되고 있는지 이해하지 못한다. 두 번째 예가 False를 반환하는 이유는 무엇입니까?

>>> 1 in [1,0]             # This is expected
True
>>> 1 in [1,0] == True     # This is strange
False
>>> (1 in [1,0]) == True   # This is what I wanted it to be
True
>>> 1 in ([1,0] == True)   # But it's not just a precedence issue!
                           # It did not raise an exception on the second example.

Traceback (most recent call last):
  File "<pyshell#4>", line 1, in <module>
    1 in ([1,0] == True)
TypeError: argument of type 'bool' is not iterable

도움을 주셔서 감사합니다. 나는 정말로 명백한 것을 놓치고 있어야한다고 생각합니다.


나는 이것이 연결된 복제본과 미묘하게 다르다고 생각합니다.

파이썬에서 표현식 0 <0 == 0이 False를 반환하는 이유는 무엇입니까? .

두 가지 질문 모두 표현에 대한 인간의 이해와 관련이 있습니다. 표현을 평가하는 두 가지 방법이 있습니다 (제 생각에는). 물론 정확하지는 않았지만 제 예제에서는 마지막 해석이 불가능합니다.

를 보면 0 < 0 == 0평가되는 각각의 절반을 상상할 수있는 당신과 표현으로 이해하기 :

>>> (0 < 0) == 0
True
>>> 0 < (0 == 0)
True

따라서 링크는 이것이 왜 평가되는지에 대한 답변입니다 False.

>>> 0 < 0 == 0
False

그러나 내 예 1 in ([1,0] == True)는 표현으로 이해가되지 않으므로 가능한 두 가지 해석이 가능하지만 한 가지만 가능합니다.

>>> (1 in [1,0]) == True

1
연산자 우선 순위합니다 ... ==보다 더 바인딩 엄격한 in, 그래서 [1,0] == True그 결과가 공급됩니다, 먼저 평가됩니다 1 in other_result.
Marc B

Python 3.2는 동일한 방식으로 작동하므로 Python-2.7 태그를 제거했습니다.
lvc

1
@Marc B는 : 두 번째 표현 설명하지 않습니다
스콧 헌터

32
@MarcB, 질문에는 그 해석을 반증하기 위해 괄호를 사용한 테스트가 포함되었습니다.
Mark Ransom

답변:


194

파이썬은 실제로 여기에 비교 연산자 체인을 적용합니다. 이 표현은

(1 in [1, 0]) and ([1, 0] == True)

분명히 False.

이것은 또한 다음과 같은 표현식에서도 발생합니다

a < b < c

어느 것으로 번역

(a < b) and (b < c)

( b두 번 평가하지 않고 ).

자세한 내용은 Python 언어 설명서 를 참조하십시오.


40
이에 대한 추가 증거는로 1 in [1, 0] == [1, 0]평가됩니다 True.
Andrew Clark

9
나는 이것을 언어 사마귀라고 오랫동안 생각 해왔다. 내가하는 것이 바람직 것 in운영자가 다른 비교 연산자보다 더 높은 우선 순위를 가지고 있으며 그되지 체인. 그러나 아마도 유스 케이스가 빠져있을 것입니다.
Steven Rumbalski

3
좋은 캐치, 나는 그것을 생각하지 않았다. 그것은의 체인 수 있도록 많은 이해가되지 않습니다 in- 모든 후 x < y < z의미가 있지만 너무 많이와x in y in z
BlueRaja - 대니 Pflughoeft

7
@Sven 유용한 : 아마도. 읽을 수있는 : 확실히 아닙니다. 파이썬은이 관습으로 일반적인 수학적 타이포그래피를 모방하려고하지만, in이것 과 함께 사용 하면 더 이상 사실이 아니며 매우 직관적이지 않습니다.
Konrad Rudolph

6
@ KononRudolph : 수학 텍스트에서 "1 ≤ x ∈ ℝ"과 같은 생각을 두 번 이상 보았지만 기본적으로 동의합니다.
Sven Marnach
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.