Jer*_*zuk 6 python generator sieve
下面的程序[Python 3.4]是一个简单的Eratosthenes筛:
from itertools import *
def excl(ns,pr):
return (i for i in ns if i%pr)
def sieve(ns):
while True:
pr=next(ns)
yield pr
ns=excl(ns,pr)
# ns=(i for i in ns if i%pr)
r=list(islice(sieve(count(2)),10))
Run Code Online (Sandbox Code Playgroud)
产生[2,3,5,7,11,13,17,19,23,29].好.取消注释内联excl()并注释该调用的行,给出[2,3,4,5,6,7,8,9,10,11].为什么?
它是否与在迭代中循环的循环中的序列进行调整时遇到的麻烦有关?
谢谢你的提示.
您的问题是,pr生成器表达式引用的值与您在 while 循环的下一次迭代中修改的值相同pr,因此每个不能被前一个“质数”数字整除的数字都被视为“质数”。它本身会修改pr,依此类推。在excl函数中,pr您引用的 是作为参数传递的,它永远不会改变。