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

조회수 1875회

파이썬 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 답변

  • 좋아요

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

답변을 하려면 로그인이 필요합니다.

Hashcode는 개발자들을 위한 무료 QnA 사이트입니다. 계정을 생성하셔야만 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 계정을 생성하셔야만 글을 작성하실 수 있습니다.