廖雪峰python中filter生成素数

def main():    for n in primes():if n<100:print(n)else:breakdef _odd_iter():n=1while True:n=n+2yield ndef _not_divisible(n):return lambda x:x % n>0def primes():#素数不包括1,从2开始yield 2it=_odd_iter()while True:n=next(it)yield nit=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__。
当模块被直接运行时,以下代码块将被运行,当模块是被导入时,代码块不被运行


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部