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

在学习廖雪峰的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에서 데이터를 탐색하는 방법은 쉽게 설명할 수 있습니다.
우리는 filterfunctioniterable 두 개의 매개변수를 허용한다는 것을 알고 있습니다. filter의 기능은 (item for item in iterable if function(item))과 동일하며, 이렇게 순회합니다. . .

it안에 무엇이 들어있나요? 아시다시피 이는 생성기 개체입니다. 각 통화 후에는 다음에 활성화될 때까지 정지됩니다.

으아악

핵심은 생성기에서 얻은 각 소수를 제거하는 것입니다.

공식 문서를 살펴보는 것이 좋습니다

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿