이 질문 에 대한 답변을 볼 때 내 답변을 이해하지 못하는 것으로 나타났습니다.
나는 이것이 어떻게 파싱되고 있는지 이해하지 못한다. 두 번째 예가 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 언어 설명서 를 참조하십시오.