왜 파이썬 (0 < 0 == 0)는 False를 return하나요?


파이썬 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
  • 2016년 02월 16일에 작성됨

조회수 378


1 답변


좋아요
0
싫어요
채택취소하기

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 입니다.

  • 2016년 02월 16일에 작성됨

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close