python - 특수문자 - 파이썬 문자열 판별




파이썬에서 문자열 비교:대== (3)

나는 쓰고있는 파이썬 스크립트가 다람쥐처럼 행동하고있는 것을 알아 채고 무한 루프로 추적했다. 루프 상태는 while line is not '' . 디버거에서 실행하면 라인이 사실임을 알게되었습니다. 내가 그것을 !='' 아닌 !='' 변경했을 때, 그것은 잘 동작했습니다.

또한 int 또는 부울 값을 비교할 때도 기본적으로 '=='을 사용하는 것이 일반적으로 더 나은 것으로 간주됩니까? 나는 그것이 더 심미적으로 기분 좋고 파이썬 스럽다는 것을 발견했기 때문에 항상 'is'를 사용하고 싶었습니다. (이것이 내가이 함정에 빠졌던 방식입니다 ...)하지만, 두 가지를 찾는 것에 관심이있을 때만 예약하려고했는지 궁금합니다. 동일한 ID를 가진 객체.


모든 내장 파이썬 객체 (문자열,리스트, 딕트, 함수 등)의 경우, x가 y이면 x == y도 True입니다.

항상 그런 것은 아닙니다. NaN은 반례입니다. 그러나 보통 , 동일성 ( is ) is 평등 ( == )을 의미합니다. 반대는 사실이 아닙니다 : 두 개의 별개의 객체는 같은 값을 가질 수 있습니다.

또한 int 또는 부울 값을 비교할 때도 기본적으로 '=='을 사용하는 것이 일반적으로 더 나은 것으로 간주됩니까?

값을 비교할 때 == 사용하고 ID를 비교할 때 사용합니다.

int (또는 일반적으로 불변 인 타입)을 비교할 때, 당신은 거의 항상 이전을 원한다. 작은 정수를 is 와 비교할 수 is 있지만 최적화에는 의존하지 않는 최적화가 있습니다.

부울 값의 경우, 비교를해서는 안됩니다. 대신에:

if x == True:
    # do something

쓰다:

if x:
    # do something

None 과 비교할 때, is None 이 선호 됨 == None .

나는 그것이 더 심미적으로 기분 좋고 파이썬 스럽다는 것을 발견했기 때문에 항상 'is'를 사용하고 싶었습니다. (이것이 내가이 함정에 빠졌던 방식입니다 ...)하지만, 두 가지를 찾는 것에 관심이있을 때만 예약하려고했는지 궁금합니다. 동일한 ID를 가진 객체.

네, 그게 정확히 무엇을위한 것입니다.


나는 and == 가 불변의 타입에 어떻게 관련되어 있는지에 대한 약간의 예를 보여주고 싶다. 시도해보십시오 :

a = 19998989890
b = 19998989889 +1
>>> a is b
False
>>> a == b
True

메모리의 두 객체를 비교하면 == 는 값을 비교합니다. 예를 들어, 작은 정수가 파이썬에 의해 캐시된다는 것을 알 수 있습니다 :

c = 1
b = 1
>>> b is c
True

값을 비교할 때 == 를 사용해야하고 ID를 비교할 때 사용해야합니다. (또한, 영어의 관점에서, "동등"은 "있는"과 다릅니다.)


이 질문 보기

독서의 논리

모든 내장 파이썬 객체 (문자열,리스트, 딕트, 함수 등)의 경우, x가 y이면 x == y도 True입니다.

약간 결함이 있습니다.

if is 적용되면 == 는 참이지만 역순으로 적용되지는 않습니다. == yield is False is True를 반환 할 수 있습니다.





equality