2011-09-23 2 views
1

코드에서 버그가 발견 될 때까지 다소 혼란 스러웠습니다. 내가 빨리 객체가 True받는 모든 이미지, 표현식이 평가하기 때문에 사진처럼 나타납니다 첫 번째 코드는 이미지가 있었다는 것을 알고 싶어하기 때문에 나는이 표현식이 다르게 평가되어야합니까?

a.matched_images.count > 0 #False when variable is 0 

a.matched_images.count #True when variable is 0 

을 변경했다 의미는 실제로 거짓입니다 ("이미지 없음/0 이미지)

정확하게 이해 했습니까?이 표현식이 다른 값으로 평가되어야한다면 답할 수 있습니까?

+1

a.matched_images.count가 int 0이면 False로 평가됩니다. 줄 바로 앞에 인쇄 유형 (a.matched_images.count) 명령을 삽입 할 수 있습니까? 아마도 그것은 방법일까요? – DSM

+1

'카운트 '란 무엇입니까? –

+1

정수 표현식은 일반적으로 0이 아닌 경우 'True'이고, 그렇지 않으면 'False'입니다. 'a.matched_images.count'가 정수라고 가정하면, 그 값이 음수라면 두 결과가 모두 다를 것입니다. –

답변

1
>>> bool(0) 
False 

그래서 ... 중요하지 않은 int 인 경우. 약간의 추적을하고 count이 실제로 무엇인지 인쇄하십시오.

+0

이 문제가있을 수 있습니다. >>> bool ('0')'나는 좀 더 자세히 살펴볼 것입니다. 나는 그 값이 0이라는 것을 오히려 확신 해 왔지만 그것이 "0"인지 "0"인지는 알 수 없다. –

3

count의 성질은 무엇입니까? 기본 파이썬 숫자 인 경우 if countif count != 0과 같습니다. 반면에 count이 맞춤 클래스 인 경우 Python 2.x의 경우 __nonzero__ 또는 __len__이거나 Python 3.x의 경우 __bool__ 또는 __len__ 중 하나를 구현해야합니다. 이러한 메소드가 정의되어 있지 않으면 해당 클래스의 모든 인스턴스는 True으로 간주됩니다.

+0

django 템플릿을 여러개의 콜렉션에 대해 변수로 사용할 때 GAE 매뉴얼에 나타나는 참조 변수는 '속성의 값은 엔티티를 참조하는 모든 엔티티에 대한 질의입니다 .' 그리고 템플릿 컨텍스트에서는 버전 1.2에서 테스트가 있음을 나타냅니다. <,> 및 ==에 템플릿 태그를 사용하십시오. 따라서 자연은 템플릿 변수입니다. –

+0

@Ethan : 그리고 count가 ** less than ** zero입니까? –

+0

@ 존 : 좋은 지적, 고마워. 업데이트 된 답변. –

2

count이 무엇인지 모르는 경우 대답하기가 어렵지만 this excerpt이 유용 할 수 있습니다.

다음 값이 거짓으로 간주되지 않는다 : 예를 들어, 모든 숫자 타입

  • 거짓

  • 제로

    • 없음, 0, 0L, 0.0, 0j.

    • 빈 시퀀스 (예 : '',(), []).

    • 임의의 빈 매핑 (예 : {}). 사용자 정의 클래스의

    • 경우, 그 방법은 정수 제로 또는 부울 값을 False를 반환 할 때 클래스가하는 __nonzero__() 또는 __len__() 방법을 정의합니다. [1]

    다른 모든 값이 true로 간주됩니다 - 많은 종류의 객체가 항상 참 을 그래서.

  • +1

    파이썬 2.x에서'__nonzero__'는 파이썬 3.x에서'__bool__'이됩니다. –

    관련 문제