2016-06-14 89 views
-1

我也碰到過這樣的一段代碼:Python:爲什麼「if <some integer>」等價於「if True」?

counts = 128 * [0] 

# some other steps here that modify the variable counts... 
# in the end we have something like counts=[12, 583, 0, etc. , etc., 384] 

for i in range(len(counts)): 
    if counts[i]: 
     outfile.write("%-12s%d\n" % (display(i), counts[i])) 

關於if聲明,據我所知,它被引入,使其跳過指令counts[i]==0時。這是因爲0相當於False。但另一方面,我認爲任何其他整數(除1之外)都不等於True。事實上,如果我在shell上鍵入3 == True,我會得到False作爲答案。那麼,爲什麼if <some integer>等於if True

+2

...因爲Python中所有非零整數都是真的嗎?試試'bool(3)';你會看到當強制爲一個布爾值時,3 *變成*'True'。 –

回答

5

3 == True正在將3作爲整數與True-as-a-boolean進行比較。

if 3:將強制3強制爲布爾值。

您會看到bool(3) == True爲真。

3

Quoting docs

任何對象都可以用於真值進行測試,以用於if或while 條件或如下的布爾運算的操作數。下面 值被認爲是假:

  • None
  • False
  • 任何數值類型的零,例如,00L0.00j.
  • 任何空序列,例如, ''()[]
  • 任何空映射,例如,{}
  • 用戶定義類的實例,如果該類定義了__nonzero__()__len__()方法,則該方法返回 整數零或布爾值False。

所有其他值都被認爲是真的 - 因此許多類型的對象總是爲真。

0

簡單在你的殼嘗試bool(3)(這是True)和bool(0)(這是False)。

bool爲零的是Falsebool非零是True

相關問題