if all([0, 4, "Sample string"]):
print "Yes"
else:
print "No"
它總是打印否儘管iterable具有所有的值。我不明白是什麼讓它評價爲假。爲什麼下面的代碼評估爲false?
if all([0, 4, "Sample string"]):
print "Yes"
else:
print "No"
它總是打印否儘管iterable具有所有的值。我不明白是什麼讓它評價爲假。爲什麼下面的代碼評估爲false?
您的迭代器包含0
,0評估爲False
。
在Python中,整數0等於False。
確實如此,但all()並不關心平等。 'None'不等於'False',也不是'0.0'或'()'或'[]',但所有這些值*在布爾上下文*中測試爲false,這是重要的。 –
all()
返回true如果所有值都爲真,請參閱function documentation:
返回
True
如果迭代的所有元素都爲真(或如果可迭代爲空)。
0
不是真值:
>>> bool(0)
False
參見Python標準類型的文檔的Truth Value Testing section:
下面的值被認爲是假:
[.. 。]
- 任何數字類型的零,例如0,0.0,0j。
要檢查數組包含「假」的任何地方布爾值(我猜你 本來打算做的),簡單地做:
if all(map(lambda v: v is not False, [0, 4, "Sample string"])):
print "Yes"
else:
print "No"
我真的想檢查是否所有的值都存在,即「不爲空」,所以0是一個可接受的值。雖然我忘記了它會等於一個布爾型的假。 –
'0'是不是真值。 –
謝謝@MartijnPieters –