每the documentation of all
:
all(iterable)
返回True
如果迭代的所有元素都是真(或者如果可迭代为空)。
而且documentation for any
:
any(iterable)
返回True
如果迭代的任何元素是真实的。 如果迭代为空,则返回False
。
空迭代[]
是falsey,但不要紧作为返回值是刚刚实施。
如果你想知道为什么出现这种情况,它只是一个执行的结果。如果你看的等同的代码为all
从文档:
def all(iterable):
for element in iterable:
if not element:
return False
return True
因为这种具体实施中,如果迭代是空的,for
循环将完全因为没有元素被跳过。因此,它返回True
。对于any
,文档提供了等效代码:
def any(iterable):
for element in iterable:
if element:
return True
return False
它一个空迭代返回False
的原因是一样的道理all
返回True
。由于列表中没有元素,因此for
循环会跳过并返回False
。
该实现确实有推理,因为空设置逻辑使all
返回true,请参阅this Math.SE post和this SO answer。 all
可以被认为是“有和元素一样多的真实元素”。由于空集没有真实元素和没有元素,因此它返回true,因为0等于0. any
可以被认为是“至少有一个...”,并且由于该集是空的,因此没有至少一个甚至不是一个元素。因此all
为空集返回true,any
为空集返回false。