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
我有这个代码:
# 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