2011-02-25 2 views
40

에서 '거짓''진정한'나는이 코드 조각 실행 시도 파이썬

path = '/bla/bla/bla' 

if path is True: 
    print "True" 
else: 
    print "False" 

을 그리고 그것은 거짓를 인쇄합니다. 나는 파이썬이 값이있는 어떤 것이라도 으로 취급한다고 생각했다. 왜 이런 일이 일어나는 걸까요?

답변

57
http://docs.python.org/reference/expressions.html#boolean-operations에서

: 부울 연산의 맥락에서

및 표현은 제어 흐름 문에서 사용하는 경우에도, 다음 값은 false로 해석됩니다 : 없음, 숫자 영, 거짓 빈 문자열 및 컨테이너 (문자열, 튜플, 목록, 사전, 집합 및 frozensets 포함). 다른 모든 값은 true로 해석됩니다.

난 당신이 "거짓으로 해석"또는 "true로 해석"되는 오해하는 생각 여기서 중요한 말씨. 그렇다고이 값이 True 또는 False와 같거나 True 또는 False와 같지 않다는 것을 의미하지는 않습니다.

표현 '/bla/bla/bla'은 부울 표현식 (AN if 문처럼) 예상되는 경우 true로 처리됩니다,하지만 표현 '/bla/bla/bla' is True'/bla/bla/bla' == True는 이그나시오의 대답에 이유 False로 평가합니다.

+6

+1 나는 이것이 오해하는 오해라고 생각합니다. 어쩌면 값을 부울로 "해석"하는 bool 함수가 있음을 알 수 있습니다. 이 함수가 모든'if '에서 암시 적으로 호출된다고 말할 수 있습니다 (기술적 인면에서는 사실이 아닐 수 있지만 적어도 if 문의 동작을 변경하지 마십시오). –

88

is은 신원을 비교합니다. 문자열은 not-string과 동일하지 않습니다.

==은 동일합니다. 그러나 문자열은 True 또는 False과 같지 않습니다.

원하지 않습니다.

path = '/bla/bla/bla' 

if path: 
    print "True" 
else: 
    print "False"