我正在尝试编写一个基于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