2014-01-08 3 views
-2

내가 알아낼 수없는 이유 :왜 함수가 파이썬에서 거짓입니까?

f = lambda x: x 
In [8]: f is True 
Out[8]: False 

In [9]: not f is True 
Out[9]: True 

In [10]: f is False 
Out[10]: False 

In [11]: f is True 
Out[11]: False 

In [12]: not f 
Out[12]: False 

In [13]: not f is True 
Out[13]: True 

In [14]: not f is False 
Out[14]: True 

확인. 그래서 지금까지 우리는 그것이 "=="대신에 "is"의 사용으로 인한 것이라고 상상할 수 있습니다. 여기에 표시된대로 :

In [15]: 0.00000 is 0 
Out[15]: False 

In [16]: 0.00000 == 0 
Out[16]: True 

Ok. 내가 기능에 그것을 할 다음 경우하지만 왜 : 내가 때문으로 설명하려고했다

In [17]: not f == False 
Out[17]: True 

In [18]: not f == True 
Out[18]: True 

In [19]: f ==True 
Out[19]: False 

In [20]: f ==False 
Out[20]: False 

In [21]: f 
Out[21]: <function __main__.<lambda>> 

대신 "=="의 "는"그러나 예 (19, 20) 내 논리를 분쇄. 누군가 설명 할 수 있습니까?

+1

에 equivelent 그렇지? 다른 값들은 참과 거짓에 대해 어떻게 비교됩니까? –

+0

awww 너무 바보. bool()을 사용하여 부울 값을 비교하는 것을 잊어 버렸습니다. 당연하지 . – deddu

답변

1

== 검사 ... is 검사 정체성 ... 함수가 아닌 falsey 값은 그러나 그것은이 기능에 고유 한 진정한

def xyz(): 
    pass 

if xyz: 
    #this will trigger since a method is not a falsey value 

xyz == True #No it is not equal to true 
xyz == False #no it is not equal to false 

xyz is True #no it certainly is not the same memory location as true 
xyz is False #no it is also not the same memory location as false 
5

is개체 식별에 대한 테스트입니다. True 이외의 것을 is True으로 비교하면 항상 false가됩니다.

다음 테스트 세트는 not (f == False) 또는 not (f == True) 인 경우 테스트합니다. 다시 한 번, 부울 객체는 자신과 동일한만큼만 테스트하므로 == False과 비교할 때 False 이외의 객체는 false로 테스트됩니다. not False이면 true입니다. 뭔가 참 또는 거짓 인 경우

당신은 테스트 대신 bool()를 사용하려면 :

>>> bool(f) 
True 
>>> bool(0) 
False 

뭔가가 참인지 거짓인지 확인하기 위해 테스트 평등을 사용하지 마십시오.

숫자 0, 빈 컨테이너와 문자열 및 False은 파이썬에서 false로 간주됩니다. 기본적으로 다른 모든 것은 부울 컨텍스트에서 true로 간주됩니다. 사용자 지정 형식은 __nonzero__ method (숫자 일 경우) 또는 __len__ method (컨테이너 구현시) 중 하나를 구현하여 해당 동작을 변경할 수 있습니다. Python 3은 __nonzero____bool__ method으로 대체했습니다.

함수에는 __nonzero__ 또는 __len__ 메서드가 없으므로 항상 true로 간주됩니다.

+0

을 지우십시오. 첫 번째 진술은 '진실은 참'이라고 항상 거짓으로 말합니다. 왜?나는 그것이 '참'이라고 생각하고 통역사는 동의한다. –

+0

나는 네가하는 말을 알지만 문자 그대로 받아 들인다. "진실은 참다"는 말은 쉽게 오독 될 수있다. (예를 들어, 거짓 거짓은 거짓임을 의미한다.) – NPE

+0

@ Noufal Ibrahim 당신은'다른 것 '을 놓쳤습니다. –

0

자신의 예는 f is False이 거짓임을 보여 주므로 제목에 혼란 스럽습니다.

함수가 부울 값과 같은 것으로 평가되는 이유는 무엇입니까? 이상한 행동이 아니겠습니까?

+0

. char.isdigit와 char가 [ '1', '2'] 인 경우 vs'char '가'[1 ','2 ']의 char 인 경우' – deddu

2

함수의 "진실성"을 확인하면 True라는 것을 알 수 있습니다. 이 함수이기 때문에

>>> f = lambda x: x 
>>> bool(f) 
True 

당신은 간단하게, 그것은 결코 것이다 True 또는 False에 함수 자체를 비교했다. equivelency에 대한

관련 문제