Python 中 all() 函数是什么意思?怎么用?
all() 判断可迭代对象的所有元素是否都为真:全真返回 True,有一个假就 False,空 iterable 返回 True。常与生成器表达式配合做条件检查。本文详解用法。
all(iterable):所有元素都为真(truthy)时返回 True,任意一个为假即返回 False;空可迭代对象返回 True。常与生成器表达式配合做"是否全部满足某条件"的判断。
基本用法
all([True, True, True]) # True
all([True, False, True]) # False
all([]) # True(空——注意这个行为)
与生成器配合(最常用)
numbers = [2, 4, 6, 8]
# 是否全是偶数
all(x % 2 == 0 for x in numbers) # True
# 是否都大于 0
all(x > 0 for x in numbers) # True
生成器写法是惰性的——遇到第一个 False 就停止(短路),不用先构造整个列表。
什么算"假值"
False、0、0.0、''、[]、{}、None、set() 都是假值:
all([1, 'a', [0]]) # True
all([1, 'a', 0]) # False——0 是假值
对应的 any()
any([False, True]) # True——任一为真即 True
any([]) # False(注意与 all 的空值行为相反)
实际应用
# 校验表单所有字段都填写了
fields = [name, email, phone]
if not all(fields):
print("有字段为空")
# 检查所有测试用例通过
all(case.passed for case in cases)
常见问题(FAQ)
Q:为什么空列表 all() 返回 True?
A:这是数学上"空真"(vacuous truth)约定:"所有元素满足条件"在没有反例时成立。逻辑上自洽,但写代码时注意空集合可能让校验"意外通过"。
Q:all 和 and 有什么区别?
A:and 返回操作数(最后一个真值或第一个假值),all() 返回布尔值且作用于可迭代对象。
Q:大数据集用 all 快吗?
A:配合生成器是 O(最短路径)——第一个 False 就返回,很快;如果先构造列表再 all,就多了一次完整遍历的内存开销。