작성 중이던 Python 스크립트가 이상하게 동작하는 것을 발견하고 무한 루프로 추적했는데, 루프 조건이 `동안 줄이 ''
가 아니었습니다. 디버거에서 실행해보니 그 줄이 실제로는 ''
인 것으로 밝혀졌습니다. 'is not ''가 아닌
!=''`로 변경했더니 정상적으로 작동했습니다.
또한 일반적으로 정수나 부울 값을 비교할 때에도 기본적으로 `==
를 사용하는 것이 더 나은 것으로 간주되나요? 저는 항상 미학적으로 더 아름답고 피타고라스 적이라고 생각하기 때문에 (그래서이 함정에 빠졌습니다...) & is를 사용하는 것을 좋아했지만, 동일한 ID를 가진 두 개의 객체를 찾는 데 관심이있을 때만 예약 된 것인지 궁금합니다.
모든 내장 파이썬 객체 (예 문자열, 리스트, 딕셔너리, 함수, 등)에 대해, x가 y이면, x==y는 또한
참입니다.
항상 그런 것은 아닙니다. NaN이 반대 예입니다. 그러나 일반적으로 동일성(is
)은 동등성(==
)을 의미합니다. 그 반대는 사실이 아닙니다: 서로 다른 두 객체가 같은 값을 가질 수 있습니다.
또한, 일반적으로 '=='를 사용하는 것이 더 나은 것으로 간주되나요? 를 사용하는 것이 더 낫다고 생각하나요?
값을 비교할 때는 ==
를, 신원을 비교할 때는 is
를 사용합니다.
정수(또는 일반적으로 불변 유형)를 비교할 때는 거의 항상 전자를 원합니다. 작은 정수를 is
와 비교할 수 있는 최적화 기능이 있지만, 이 기능에 의존하지 마세요.
부울 값의 경우 비교를 전혀 수행하지 않아야 합니다. 대신에:
if x == True:
# do something
쓰기:
if x:
# do something
없음과 비교할 때는
== 없음보다
is 없음`이 선호됩니다.
저는 항상 'is'를 사용하는 것을 좋아합니다. 미학적으로 더 보기 좋기 때문입니다. 그리고 피타닉 (이것이 제가 이 함정에 빠진 이유입니다. 이 함정에 빠졌습니다...), 그러나 그것이 단지
그냥 예약 된 것일뿐입니다. 두 개의 객체를 찾는 데 관심이 있습니다. 두 개를 찾으려고 할 때를 위한 것이 아닌가 싶습니다.
네, 바로 그 용도가 바로 그것입니다.
불변 유형에 `is
와 ==
가 어떻게 관여하는지에 대한 간단한 예를 보여드리겠습니다. 해보세요:
a = 19998989890
b = 19998989889 +1
>>> a is b
False
>>> a == b
True
is는 메모리에서 두 객체를 비교하고
==`는 그 값을 비교합니다. 예를 들어, 작은 정수가 파이썬에 의해 캐시되는 것을 볼 수 있습니다:
c = 1
b = 1
>>> b is c
True
값을 비교할 때는 ==
를, 신원을 비교할 때는 is
를 사용해야 합니다. (또한 영어의 관점에서 볼 때 '같음'은 'is'와 다릅니다.)
논리는 필터링되지 언급했다. 성명은 >. 만약 x 가 y 어졌다면 x = y 마찬가지입니다
It 는 논리적인 오류가 있다고 할 수 있는 한 부분을 판독기에서 논리를 기술서임을 그렇다. 참조 [http://en.wikipedia.org/wiki/Converse_ (논리학)] [1]
[1]: http://en.wikipedia.org/wiki/Converse_% 28logic% 29