源代码
来自廖雪峰-filter
算法描述参考原文。
代码块如下:
def _odd_iter(): # 生成一个无限序列的奇数Generator
z = 1
while True:
z = z+2
yield z
def _not_divisible(y): # 用埃氏筛选法过滤掉奇数序列中的合数
return lambda x : x % y > 0
def primes():
yield 2
it = _odd_iter() # 初始序列
while True:
n = next(it) # 返回序列的第一个数
yield n
it = filter(_not_divisible(n), it) # 构造新序列
for n in primes(): # 打印前1000个数中的素数
if n < 1000:
print(n)
else:
break
疑问
将语句it = filter(_not_divisible(n), it) 修改成it = filter(lambda x : x % n >0, it)这句,表面看起来似乎等价,执行结果却完全不同。