python3.x - Python中filter使用的一个疑问
阿神
阿神 2017-04-17 17:51:55
0
1
342

在学习廖雪峰的Python3.5 教程
filter 这一章有一个示例是“如何选出素数”,这里我有一些疑问,希望有人能够帮我解答,代码如下:

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

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

def primes():
    yield 2
    it = _odd_iter();
    while True:
        n = next(it)
        yield n
        it = filter(_not_pisible(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 是惰性的计算呀,这里不太理解如何能够不断的嵌套的

阿神
阿神

闭关修行中......

全員に返信(1)
迷茫

文を修正してください

は実際には filter の実際の入力パラメータであり、xfilter の別の入力パラメータ it を参照します。

ここで it はジェネレーター オブジェクトであり、filter はそれによって生成された値を毎回取得します。したがって、xit を参照するのではなく、単に it によって生成された値を参照します。

it 内のデータをトラバースする方法については、簡単に説明できます。
filter は 2 つのパラメータ functioniterable を受け入れることがわかっています。 filter の関数は (item for item in iterable if function(item)) と同等であり、これがその横断方法です。 。 。

it中には何が入っているの? ご存知のとおり、これはジェネレーター オブジェクトです。各呼び出しの後、次回アクティブ化されるまでハングします。

リーリー

本質は、ジェネレータから取得した各素数を削除することです。

公式ドキュメントを参照することをお勧めします

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート