2014-01-08 58 views

回答

8

range(100)包含0和0布爾值是False

In [1]: bool(0) 
Out[1]: False 

而對於其他任何數量的計算結果爲True。函數all僅當其參數的所有元素評估爲True時,纔會返回True,請參閱其manual(在給定示例中的if語句隱式地採用每個項目的布爾值)。看到這裏包括0與否的區別:

In [2]: all(range(10)) # 0..9 
Out[2]: False 

In [3]: all(range(1,10)) # 1..9 
Out[3]: True 
2

因爲range產生的第一個數字是0。

>>>range(10) 
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 

# 0 is evaluated to false in boolean expressions 
>>>bool(0) 
True 

# making range start at 1 
>>>all(range(1, 100)) 
True 
+0

當心你的「falsiness」測試,因爲'[] ==假即使'not []'爲'True',也是'False'。用'not'或明確轉換爲'bool'來測試謬誤更準確。 '0 == False'測試只是因爲執行'False'的方式。 – SethMMorton

+0

@SethMMorton感謝您的支持。我會更新'bool(0)'的答案。但是我期望如果'[] == False'那麼'not []'是否等於true,是嗎? –

+0

編號'not'或'bool'使用對象的__nonzero__方法(python 3.x中的'__bool__')。 '=='使用'__eq__'。當你使用'=='時,它需要另一個列表,所以當將它自身與'False'進行比較時,它會看到它不相同並返回'False'。當你使用'not'或'bool'時,它會「查看自身內部」來確定它是否爲「假」或「真」。 – SethMMorton

相關問題