2011-09-23 67 views
1

直到我在代碼中發現錯誤時,我感到有點困惑。我不得不改變這些表達式應該以不同的方式評估嗎?

a.matched_images.count #True when variable is 0 

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

因爲我很快想知道一個對象是否有任何圖像,第一個代碼會出現像照片具有圖像,因爲表達式的值爲True當這意味着真的是假的(「沒有圖像」/ 0圖像)

我是否正確理解這一點,如果這些表達式應評估爲不同的值,您可以回答或發表評論。

+1

如果a.matched_images.count是int 0,那麼它應該計算爲False。你可以在行之前插入一個打印類型(a.matched_images.count)命令嗎?可能是一種方法? – DSM

+1

'count'是什麼? –

+1

整數表達式如果非零則通常爲「真」,否則爲「假」。假設'a.matched_images.count'是一個整數,如果該值爲負數,兩者都會有不同的結果。 –

回答

1
>>> bool(0) 
False 

所以..不,如果它是一個無關緊要的int。請做一些跟蹤,打印出其實count

+0

這可能是這個問題>>> bool('0')'我會仔細看看發生了什麼。我一直很確定這個值是0,但我不知道它是'0'還是'0'。 –

3

count是什麼性質?如果它是一個基本的Python編號,則if countif count != 0相同。另一方面,如果count是自定義類,那麼它需要爲Python 2.x執行__nonzero____len__,或者爲Python 3.x執行__bool____len__。如果這些方法沒有定義,則該類的每個實例都被認爲是True

+0

django模板變量爲一個集合中的一個引用變量出現在GAE手冊中,該屬性的值是一個引用實體的所有實體的查詢,並且在模板上下文中它是1.2版本中的新增功能,爲<,>和==使用模板標籤。所以性質是一個模板變量。 –

+0

@Ethan:如果計數是**小於**零呢? –

+0

@John:好的,謝謝。更新了答案。 –

2

不知道count是什麼,很難回答,但this excerpt可能對你有用。

下面的值被認爲是假:

  • 任何數值類型的零,例如,0,0L,0.0,0j的。

  • 任何空序列,例如'',(),[]。

  • 任何空映射,例如{}。用戶定義的類的

  • 情況下,如果類定義了一個 __nonzero__()__len__()方法,當方法返回 整數零或布爾值假。 [1]

所有其他值被認爲是真實的 - 這麼多種類的對象 總是如此。

+1

Python 2.x中的__nonzero__'在Python 3.x中變成__bool__ –