2017-03-09 47 views

回答

2

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 postthis SO answerall可以被认为是“有和元素一样多的真实元素”。由于空集没有真实元素和没有元素,因此它返回true,因为0等于0. any可以被认为是“至少有一个...”,并且由于该集是空的,因此没有至少一个甚至不是一个元素。因此all为空集返回true,any为空集返回false。