埃氏筛法中的lambda表达式

来源:互联网 发布:java web进销存源码 编辑:程序博客网 时间:2024/05/13 22:58

张雪峰大神python教程里有一个利用filter函数实现埃氏筛法计算素数的代码,查了下lambda表达式,理解了这段代码的意思

#定义一个生成器,生成3开始的素数序列,因为埃氏筛法用到了素数序列def _odd_iter():    n = 1    while True:        n = n + 2#定义一个筛选函数,放到filter里面判断素数def _not_divisible(n):    return lambda x: x % n > 0#这里有一个lambda表达式,当一个素数传进来,lambda中的n接受到这个数,然后整个函数返回了一个lambda表达式    #素数生成器     def primes():    yield 2 #2是第一个素数    it = _odd_iter() # 生成一个对象,也是一个惰性序列    while True:        n = next(it) # 返回it生成器生成的第一个奇数,3        yield n #3也要返回        it = filter(_not_divisible(n), it) # 构造新序列#打印for n in primes():    if n < 1000:        print(n)    else:        break

有一个问题,不是特别懂:it = _odd_iter()初始序列it,那么 it 序列中表示的就是整个奇数吗?
如果 it 中就是整个奇数序列,那么下面的内容就好理解了,因为就是埃氏筛法的计算过程了,但是如果不是我所理解的,下面的代码就不好理解了。。。

原创粉丝点击