求素数

看了半天才看明白。。。对迭代器的理解还是不够啊。思路不够开阔。

 

 1 # 迭代器对象从3开始每次加2迭代
 2 def _odd_iter():
 3     n = 1
 4     while True:
 5         n = n+2
 6         yield n
 7 
 8 # 返回匿名函数
 9 def _not_divisible(n):
10     return lambda x:x%n>0
11 
12 # 这也是一个迭代器函数
13 def primes():
14     # 第一次返回2
15     yield 2
16     # 初始化迭代器函数对象
17     it = _odd_iter()
18     while True:
19         # 每次迭代获取下一个对象
20         n = next(it)
21         # 返回这个对象
22         yield n
23         # 移除迭代器中和本次所取数据求模等于0,及可以被该数据整除的对象(这里迭代数据成为了匿名函数的参数x)
24         it = filter(_not_divisible(n),it)
25 
26 for n in primes():
27     if n <1000:
28         print(n)
29     else:
30         break

这个算法的重点在于对迭代器的使用。利用惰性计算的序列实现简洁的算法。

 

posted @ 2017-08-25 17:30  绝望的老猫  阅读(120)  评论(0编辑  收藏  举报