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 –