True 和 False 怎么可能是空字符串?

时间:2021-02-13 03:51:09

标签: python

e = ''
all(e), any(e)

我预计 all(e), any(e) 都会返回 False。但是,all(e) 返回 True 而 any(e) 返回 False。

我无法理解空字符串如何既是真又是假?

2 个答案:

答案 0 :(得分:1)

来自Python documentation

<块引用>

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)

来自documentation on all

<块引用>

如果可迭代对象的所有元素都为真(或可迭代对象为空),则返回 True

来自documentation on any

<块引用>

如果可迭代对象为空,则返回 False

您传递了一个空的可迭代对象,这就是发生的事情。

相关问题