廖雪峰python中filter生成素数

def main():    
    for n in primes():
        if n<100:
            print(n)
        else:
            break

def _odd_iter():
    n=1
    while True:
        n=n+2
        yield n

def _not_divisible(n):
    return lambda x:x % n>0
    
def primes():
    #素数不包括1,从2开始
    yield 2
    it=_odd_iter()
    while True:
        n=next(it)
        yield n
        it=filter(_not_divisible(n),it)   
if __name__=='__main__':
    main() 

it=filter(_not_divisible(n),it)
it=filter(lambdax:x % n>0,it)两次结果不一样

lambda中n是引用(所以会变,都是同一个)而经过函数的 n 会被拷贝一份放闭包里

闭包是引用了自由变量的函数。这个被引用的自由变量将和这个函数一同存在,即使已经离开了创造它的环境也不例外。


__name__ 是当前模块名,当模块被直接运行时模块名为 __main__。
当模块被直接运行时,以下代码块将被运行,当模块是被导入时,代码块不被运行

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值