2011-12-19 6 views
2

내 코드의 일부는 두 항목 사이의 비교에 의존하며 존재하지 않는 변수와 비교해 볼 수 있습니다. 이와 같이 필자는 필러 변수 값을 세트에 넣어서 둘 다 정의되고 비교할 수 있는지 확인합니다.어떻게 Python에서 결코 일치하지 않는 변수를 정의 할 수 있습니까?

그러나 필자가 필러 값을 추가하면 다른 값과 일치하는 것을 원하지 않습니다. 나는 None을 사용할 것이지만, 다른 값은 None 일 수도 있습니다. 필자의 값이 어떤 것과도 일치하지 않는지 확인하는 좋은 방법이 있다면 궁금합니다. 이미 정의 된 값은 무엇이든 될 수 있습니다 (사용자가 정의한대로).

또한이 문제를 해결할 수있는 다른 방법에 대한 의견이 있습니다.

+0

코드를 공유 하시겠습니까? 그런 특별한 솔루션이 필요하다는 것을 알고 싶습니다. –

답변

3

비교할 맞춤 클래스를 정의 할 수있는 것처럼 보입니다. 예를 들어 다음

missing = object() 

및 비교에 missing를 사용합니다 (원 : someValue와 단지에 대한 것은 어떻게 NoValue

의 인스턴스
+2

'is' 연산자를 사용하고 불필요한 인스턴스 생성을 피하십시오.'None'처럼 일반'NoValue'를 사용하십시오. – redShadow

+0

@redShadow 좋은 지적, 나는 대답을 업데이트 할 것이다 – obmarg

+3

그 점에 대해서, 당신은 단지'NoValue = object()'를 사용할 수있다. – delnan

1

여러 번 나는 어쨌든 ..

을 "기본값"정도를 의미하는 대신 NoneEllipsis의 사용을 보았다, 나는 완전히 질문을 이해 확실하지 않다 :

  • 어떤 종류의 당신이 비교하는 대상은? dict s?
  • 몇 가지 코드를 게시 할 수 있습니까? 나는 그들이 정의되고 비교 될 수 있도록 디폴트 값을 설정하는 요점을 보지 못한다. KeyError 예외를 잡거나 .get() ..을 사용하면 어떨까요?
+0

그럴 수는 있었지만, 필요한 모든 것이 부정적인 비교 일 때 불필요한 것처럼 보였습니다. 또한, 나는 문자열을 비교합니다. –

+0

나는 그것이 "불필요한"방법을 모르겠다. 물론 Ellipsis를 사용하거나 누락 된 값에 사용할 클래스를 정의 할 수 있지만, 예외를 잡는 것이 가장 좋은 방법이다. 다시 말하면 어떤 비교 대상에서 어떤 종류의 대상을 사용하고 있습니까? 그들은 끈을 사용하고 있습니까? – redShadow

8

되지 않습니다으로

class NoValue: 
    pass 

if someValue is NoValue: 
    doSomething() 

는 비교는 항상 실패한다 None을 포함하여 다른 객체와 동등한 비교).

관련 문제