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

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

나는 이것이 어떻게 파싱되고 있는지 이해하지 못한다. 두 번째 예가 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]) and ([1, 0] == True)

분명히 False.

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

a < b < c

어느 것으로 번역

(a < b) and (b < c)

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

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


답변