求素数
看了半天才看明白。。。对迭代器的理解还是不够啊。思路不够开阔。
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
这个算法的重点在于对迭代器的使用。利用惰性计算的序列实现简洁的算法。