all() 是 Python 的内置逻辑判断函数,用于检查可迭代对象中的所有元素是否都为真值。它在数据校验、条件筛选等场景中,能让判断逻辑更加简洁、高效。

一、函数语法

all(iterable)

参数:

iterable:必填,任意可迭代对象(如字符串、列表、元组、集合、字典、生成器等)。

要注意的是,对字典而言,all() 判断的是(key)的真值,而不是(value)。

返回值:

True:当且仅当 iterable 中的所有元素都为真值或 iterable 为空。

False:当至少有一个元素为假值时。

布尔判断逻辑:

遵循 Python 的“”:空、零、None、False 等为假,其余为真。

特别注意:空可迭代对象的 all() 返回 True,这是数学逻辑恒真性的定义(并不意味着空对象在布尔上下文中为真)。

二、基础用法示例

1、所有元素为真值

print(all([1, 2, 3]))       # True
print(all(['a', 'b', 'c'])) # True

2、存在假值

print(all([1, 0, 3]))  # False
print(all([True, False, True]))  # False

3、空可迭代对象

print(all([]))   # True
print(all(()))   # True
print(all({}))   # True

空集合在逻辑恒真性定义下返回 True。

3、字典的判断

print(all({'a': 1, 'b': 2}))      # True  (判断的是键)
print(all({'a': 0, 'b': 2}))      # True  (键 'a' 不是假值)

提示:

all() 对字典只检查键的真值,而不会检查对应的值。

三、进阶技巧

1、配合生成器表达式进行条件检查

建议使用生成器表达式而不是列表推导式,可以避免额外的内存消耗。

nums = [2, 4, 6, 8]
print(all(n % 2 == 0 for n in nums))  # True

2、数据校验

data = ["apple", "banana", "cherry"]
if all(isinstance(item, str) for item in data):
    print("全部是字符串")

3、短路特性(惰性求值)

all() 会从左到右依次判断,一旦遇到假值立即返回 False,后续元素不再检查。

def check(x):
    print(f"检查 {x}")
    return x > 0

nums = [1, -1, 2]
print(all(check(n) for n in nums))
# 输出:
# 检查 1
# 检查 -1
# False(遇到假值立即返回)

四、补充说明

1、与 any() 的关系

all(iterable):检查是否全部为真(逻辑与)。

any(iterable):检查是否至少有一个为真(逻辑或)。

2、可读性建议

对复杂条件判断,推荐 all() + 生成器表达式的写法,避免显式循环,提高可读性和性能。

3、性能考虑

all() 对可迭代对象按顺序依次判断,遇到假值立即结束(短路特性)。

对迭代器和生成器,all() 会惰性求值,不会一次性展开全部数据,在大数据集场景下性能优越。

点赞有美意,赞赏是鼓励