在学习廖雪峰的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 是惰性的计算呀,这里不太理解如何能够不断的嵌套的
문장을 수정하세요
여기
it
는 생성기 개체이고filter
는 매번 생성된 값을 가져옵니다. 따라서x
은it
을 참조하는 것이 아니라it
에서 생성된 값일 뿐입니다.it
에서 데이터를 탐색하는 방법은 쉽게 설명할 수 있습니다.우리는
filter
이function
및iterable
두 개의 매개변수를 허용한다는 것을 알고 있습니다.filter
의 기능은(item for item in iterable if function(item))
과 동일하며, 이렇게 순회합니다. . .
으아악it
안에 무엇이 들어있나요? 아시다시피 이는 생성기 개체입니다. 각 통화 후에는 다음에 활성화될 때까지 정지됩니다.핵심은 생성기에서 얻은 각 소수를 제거하는 것입니다.
공식 문서를 살펴보는 것이 좋습니다