(相关资料图)
1、不会死循环,生成器是个虚拟抽象的概念,你可以认为_odd_iter()primes() 里面运行的时候python解释器并不生成实际的List,也就不会耗费内存和时间真正分配给List内存只在以下过程, primes()这个生成器是逐步分配内存的!!forninprimes():ifn<1000:print(n)else:break另外提醒你下,你的程序只能在Python 3.x版本下正确运行:-)因为你用的是 filter返回生成器对象的用法!!如果你要你的程序在Python 2.x正确运行,需改成如下形式。
2、根据你最新的追问,“为什么it=filter(lambda x : x%n>0 ,it)不行??“直接在filter里用Lambda表达式是完全可以的,你的原因是你的Lambda表达式漏输入了一个n,请看如下形式.#Python2.x下需导入itertools库的ifilter才能和python3.x的filter等效importitertoolsdef_odd_iter():n=1whileTrue:n=n+2yieldndef_not_divisible(n):returnlambdax:x%n>0defprimes():yield2it=_odd_iter()whileTrue:n=next(it)yieldn#it=***.ifilter(_not_divisible(n),it)it=***.ifilter(lambdax,n=n:x%n>0,it)forninprimes():ifn<1000:print(n)else:break。
本文就为大家分享到这里,希望看了会喜欢。