e = ''
all(e), any(e)
我预计 all(e), any(e)
都会返回 False。但是,all(e)
返回 True 而 any(e) 返回 False。
我无法理解空字符串如何既是真又是假?
答案 0 :(得分:1)
all(iterable)
如果可迭代对象的所有元素都为真,则返回 True
(或者如果可迭代对象为空)。相当于:
def all(iterable):
for element in iterable:
if not element:
return False
return True
当您使用字符串调用 all()
时,它会遍历字符串,就像它是一个字符列表一样。例如,all('foo')
等价于 all(['f', 'o', 'o'])
。
空字符串就像一个空列表,所以上面的粗体部分适用。空列表是 vacuously true:
<块引用>在数学和逻辑中,一个空洞的真理是一个有条件的或全称的陈述,它只有在不能满足先行条件时才为真。例如,即使房间内没有手机,“房间内所有手机都已关闭”这句话也是正确的。在这种情况下,“房间内所有手机都已打开”的陈述也将是空洞的,两者的连词也是如此:“房间中的所有手机都已打开和关闭”。出于这个原因,有时人们会说一个陈述是空洞的,只是因为它没有真正说什么。
有关空洞真实陈述的更多示例,请参阅this excellent answer。
答案 1 :(得分:0)
如果可迭代对象的所有元素都为真(或可迭代对象为空),则返回 True
。
如果可迭代对象为空,则返回 False
。
您传递了一个空的可迭代对象,这就是发生的事情。