Python用filter求素数
廖雪峰的Python教程中关于使用filter求素数的例子不太明白,
def _odd_iter():
n = 1
while True:
n = n + 2
yield n
def _not_divisible(n):
return lambda x: x%n > 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():
if n < 30:
print(n)
else:
break
关于这句it = filter(_not_divisible(n), it)
,既然it是一个iterator那就是惰性计算的,那么每次运行到这句时,filter只是对it代表的无限列表的当前yield出来的一个值进行了过滤,那么为什么最后可以得到通过了所有筛选条件的无限列表?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
filter和map是类似的,返回的也是一个迭代器,对传入的可迭代对象的每一项用指定的函数进行筛选,转化为list或者使用for循环就会一次性对每一项进行筛选,你可以试一试这一段代码
按照官方文档所说的:
filter(function, iterable)
等价于(item for item in iterable if function(item))