나는 최근 에이 구문을 보았지만 차이점을 알지 못했습니다.
누군가가 그 차이를 말해 줄 수 있다면 고맙겠습니다.
답변
인용 :
클래스는 원하는 방식으로 비교를 자유롭게 구현할 수 있으며 None과 비교할 수 있습니다. 그 자체로?).
실제로 말하면, 커스텀 비교 연산자가 드물기 때문에 큰 차이가 없습니다. 그러나 is None
일반적인 규칙으로 사용해야합니다 .
답변
class Foo:
def __eq__(self,other):
return True
foo=Foo()
print(foo==None)
# True
print(foo is None)
# False
답변
이 경우에는 동일합니다. None
은 단일 객체입니다 (단 하나만 존재합니다 None
).
is
객체가 동일한 객체인지 확인하고 ==는 동일한 객체인지 확인합니다.
예를 들면 다음과 같습니다.
p = [1]
q = [1]
p is q # False because they are not the same actual object
p == q # True because they are equivalent
그러나 하나만 있기 때문에 None
항상 동일하며 is
True를 반환합니다.
p = None
q = None
p is q # True because they are both pointing to the same "None"
답변
numpy를 사용하면
if np.zeros(3)==None: pass
numpy가 요소별로 비교할 때 오류가 발생합니다.
답변
없음과 비교하는 내용에 따라 다릅니다. 일부 클래스에는와 == None
다르게 취급되는 사용자 정의 비교 방법이 있습니다 is None
.
특히 출력은 a == None
부울 일 필요는 없습니다 !! -버그의 빈번한 원인.
특정 예제의 경우 ==
비교가 요소별로 구현 되는 numpy 배열을 사용하십시오 .
import numpy as np
a = np.zeros(3) # now a is array([0., 0., 0.])
a == None #compares elementwise, outputs array([False, False, False]), i.e. not boolean!!!
a is None #compares object to object, outputs False