当 n=2 时,这个素数生成器代码如何在循环的第一轮工作?

How does this prime generator code work on the first round of the loop when n=2?

我正在 python 学习发电机。我按照 https://jakevdp.github.io/WhirlwindTourOfPython/12-generators.html 的代码,但在 n=2 时完全被程序弄糊涂了, all(n % p > 0 for p in primes) 的结果到底是什么? 据我了解,循环的第一轮 primes 是空的。那么为什么表达式为真并将 2 添加到集合中呢?

def gen_primes(N):
    """Generate primes up to N"""
    primes = set()
    for n in range(2, N):
        if all(n % p > 0 for p in primes):
            primes.add(n)
            yield n

print(*gen_primes(100))

来自 all() 的文档:

Return True if all elements of the iterable are true (or if the iterable is empty)

因此,当 primes 为空时,n % p > 0 for p in primes 也为空,因为没有可迭代的内容。因此 all() returns True, n 添加到 primes.