python中filter是什么意思_Python中filter使用的一个疑问

在学习廖雪峰的Python3.5 教程

在 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)#怎么就实现了循环遍历 it了?

for n in primes():

if n < 30:

print(n)

else:

break

代码中我标有注释的一句话那里我能够明白是:

lambda x: x%n > 0

其实才是真正的 filter 的入参,而

x

指的是 filter 的另一个入参

it

我的疑问是,这里怎么就实现了将

it

中的数据遍历循环下去了呢?

换句话说,

it

这个 Generator 里面到底是啥?

比如:

n = 3

yield 3

it = filter(lambda x: x % 3 >0, it)   # 这个里面it 到底有了哪些变化了?如何实现了过滤掉了素数?

it

等于了一个经过 filter 了个

it

,虽然说是一种递归、或者嵌套的计算,但 Generator 是惰性的计算呀,这里不太理解如何能够不断的嵌套的

纠正一下你的这句话

其实才是真正的

filter

的入参,而

x

指的是

filter

的另一个入参

it

这里的

it

是一个生成器对象,而

filter

每次会得到一个由它生成的值。所以

x

指的不是

it

,只是

it

产生的一个值。

至于怎么实现将

it

中的数据遍历下去,这个很好解释。

我们知道

filter

接受两个参数

function

iterable

。而

filter

的功能就等价于

(item for item in iterable if function(item))

,它就是这么遍历完的。。。

it

里面到底是啥? 正如你知道的,它就是一个生成器对象。每当一次调用结束后它就会挂起,直到下一次被激活。

while True:

n = next(it)

yield n

it = filter(_not_divisible(n), it)#怎么就实现了循环遍历 it了?

它的实质就是把得到的每个素数从生成器中剔除。

建议你可以看一下官方文档

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值