每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。