Python 终端中的素数生成器

Python prime numbers generators in terminal

我有这个代码:

# Developing a program to generate all prime numbers

def gen_primes():
    n = 2
    primes = set()
    while True:
        for p in primes:
            if n%p == 0:
                break
        else:
            primes.add(n)
            yield n 
        n += 1

我可能跑题了,但我假设 gen_primes().next () 以 2 开头,然后移动到下一个质数 3,依此类推直到结束时间。然而,当我在终端中访问这些值时,它们根本不这样做。

>>> for i in range(10):
...     gen_primes().next()
... 
2
2
2
2
2
2
2
2
2
2

>>> gen_primes().next()
2
>>> gen_primes().next()
2
>>> gen_primes().next()
2
>>> gen_primes().next()
2

这里发生了什么我不知道的事情?作为旁注,如果它很重要,我将导入脚本(作为模块)。

gen_primes() 每次都创建一个新的生成器对象。相反,将它存储在一个变量中并使用 next,就像这样

>>> primes = gen_primes() 
>>> for _ in range(10):
...     next(primes)
...     
... 
2
3
5
7
11
13
17
19
23
29

与其迭代可迭代对象,不如将其留给内置 itertools.islice 模块,就像这样

>>> from itertools import islice
>>> for prime in islice(gen_primes(), 10):
...     print(prime)
...     
... 
2
3
5
7
11
13
17
19
23
29