Python生成器的无限素数

时间:2016-08-14 09:19:22

标签: python lambda nested generator primes

我正在尝试编写一个基于Erastosthenes筛子的无限素数生成器用于学习目的(我知道它不是真正的筛子而且效率不高)。以下代码似乎不起作用,即使我在解释器中键入非常步骤它正常工作。那是为什么?

import itertools

def gen_primes():
    integers = itertools.count(2)
    while True:
        i = integers.next()
        yield i
        integers = itertools.ifilter(lambda x: x % i != 0, integers)

返回的结果是2,3,4,5,6等,所以看起来变量整数似乎没有被覆盖。

这是解释器应该如何工作的一个例子:

>> integers = itertools.count(2)
>> integers.next()
   2
>> integers = itertools.ifilter(lambda x: x % 2 != 0, integers)
>> integers.next()
   3
>> integers = itertools.ifilter(lambda x: x % 3 != 0, integers)
>> integers.next()
   5
>> integers = itertools.ifilter(lambda x: x % 5 != 0, integers)
>> integers.next()
   7
>> integers = itertools.ifilter(lambda x: x % 7 != 0, integers)
>> integers.next()
   11

0 个答案:

没有答案