廖雪峰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__。
当模块被直接运行时,以下代码块将被运行,当模块是被导入时,代码块不被运行

你可能感兴趣的:(廖雪峰python中filter生成素数)