python filter 素数

filter是python内建的过滤函数

filter把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素
filter()函数返回的是一个Iterator(迭代器),也就是一个惰性序列,需要通过next()使filter()返回以一个值,或者通过for循环或list()强制filter完成计算

创建main函数

因为prime()函数是一个无限的序列,所以需要设置一个跳出循环 的条件,
prime()是一个Iterator,是惰性序列,需要for循环不断的调用next()

def main():
    for n in prime():
        if(n<10):
            print(n)
        else:
            break

创建prime函数

第一个数2肯定为素数,所以可以率先筛选掉序列中2的倍数()do_iter()),do_iter()函数为Iterator,需要不断地调用next()使do_iter返回下一个值,使用filter调用yes_not()函数筛选序列

为什么不直接使用匿名函数

因为filter生成的是惰性数列,也就是说它其实只是将一个规则存储下来,并不是立即计算出结果存储的。当filter后使用lambda函数,lambda x:x%n>0,n的值在每次循环中都会被迭代成新的,这时候filter只会存储最后的n值……比如你让最后的n等于999,那所有在之前的do_iter里生成的数除以999的余数当然都是大于0的……那最后你就是打印出了所有的奇数’

def prime():
    yield 2
    it=do_iter()
    while True:
        n=next(it)
        yield n
        it=filter(yes_not(n),it)

创建do_iter函数

do_iter函数直接去掉了序列中2的倍数

def do_iter():
    n=1
    while True:
        n=n+2
        yield n

创建yes_not函数

筛选x是否为n的倍数,返回True和False以供filter函数筛选## 标题

 def yes_not(n):
    return lambda x:x%n>0

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值