왜 파이썬 (0 < 0 == 0)는 False를 return하나요?
조회수 2845회
파이썬 2.6에 Queue.py을 보던 중에 이런 코드를 봤습니다.
소스코드
def full(self):
"""Return True if the queue is full, False otherwise
(not reliable!)."""
self.mutex.acquire()
n = 0 < self.maxsize == self._qsize()
self.mutex.release()
return n
maxsize
가 0이면 큐는 절대 차지 않으니까 False여야 하지만
제가 보기에 maxsize
가 0일 때 저 코드는 0 < 0 == 0
니까 True를 return할 것 같은데 정상적으로 False를 return하더라구요.
왜 그런 걸까요?
>>> 0 < 0 == 0
False
>>> (0) < (0 == 0)
True
>>> (0 < 0) == 0
True
>>> 0 < (0 == 0)
True
1 답변
-
python은 관계 연산자가 여러 개 나오는 경우 좀 특수한 연산을 합니다. 말로 설명하기 힘든데 예를 들면,
C/Java에서는
x
가[0,100]
안에 들어가는지를 검사하는 경우0 <=x && x <= 100
같이 쓰지만, 파이썬에서는
0 <= x <= 100
로 쓰면 그만입니다. 이런 비교 방식을 chained comparisons라고 합니다. 자세한 건 Comparisions를 보세요.
그래서
0 < 0 == 0
->(0 < 0) and (0 == 0)
와 동일하기 때문에 False 입니다.
댓글 입력