当 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
.
我正在 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
.