def _odd_iter():
n = 1
while True:
n = n + 2
yield n
def zc(x):
return x%n > 0
def _not_divisible(n):
return lambda x: x % n > 0
def primes():
yield 2
it = _odd_iter() # 将地址赋予it
while True:
n = next(it) # 返回序列的第一个数3
yield n
it = filter(_not_divisible(n), it) # 构造新序列
#对上面解释:
# 第一次返回2
# 第二次执行时,第一次执行到yield n 这时候n=3,返回3
#第三次执行时,执行到了it = filter(_not_divisible(n), it),
# 此时n=3,也就是it2 = filter(lambda x:x%3 > 0,it) lambda x:x%3>0是函数,括号中的it是惰性序列,(这里为了区分使用it2标记)
# 然后由函数与it构造一个filter返回一个新的惰性序列,赋值给it2
# 此时的it2=filter(lambda x:x%3 > 0,iterator(3,5,7,9....))即it2收集到的是一个不能被2,3整除的惰性序列即iterator(5,7,11...)
#然后继续执行,while True: n=next(it2) 然后将n的值返回,这里是将此时n的值为5,因为it2过滤掉了3,3%3=0,然后将5返回
#第四次执行,it3 = filter(lambda x:x%5 > 0,iterator(5,7,11...))此时it3收集到的是不能被2,3,5整除的惰性序列了
#以此类推,就收集到了全部的素数啦