Python素数生成器循环首轮n=2时all函数返回True的原理是什么?
Python素数生成器空集合判断逻辑解答
你疑惑的核心是Python内置all()函数的默认规则,和生成器语法无关:
all(可迭代对象)的判定逻辑是:只有可迭代对象里所有元素的布尔值都为True时才返回True,如果可迭代对象本身是空的,会直接返回True。这个是数理逻辑里的通用约定:针对空集合的全称判断默认成立,通俗来说就是“没有反例就默认条件满足”。- 对应代码第一次循环(n=2)的场景:此时
primes是空集合,all(n % p > 0 for p in primes)里的生成器表达式遍历不到任何元素,没有违反n % p >0的情况,自然返回True,因此if条件成立,2会被加入素数集合并返回。
你可以直接运行下面的代码验证这个规则:
# 空可迭代对象传入all返回True print(all([])) # 输出:True print(all(item for item in set())) # 输出:True
补充个方便记忆的点:和all()对应的any()函数刚好相反,空可迭代对象传入会返回False,对应“空集合里没有满足条件的元素”的逻辑。
内容的提问来源于stack exchange,提问作者Ray Ronnaret
相关产品推荐
相关产品推荐

