I am trying to write an infinite prime number generator based on the Sieve of Erastosthenes for learning purposes (I know it is not a real sieve and it is not efficient). The following code does not seem to work even though if I type very step in the interpreter it works correctly. Why is that?
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)
The results returned are 2, 3, 4, 5, 6, etc. so it seems like the variable integers is not overwritten.
Here is an example in the interpreter of how it should work:
>> 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