Python:过滤器和生成器

时间:2018-06-27 06:31:35

标签: python python-3.x

代码如下:

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)
for n in primes():
    if n < 10:
        print(n)
    else:
        break

1。我想知道这个练习的过程是什么,我被困在了

it = _odd_iter()

it = filter(_not_divisible(n), it)

存储的值是列表还是类似的东西?

1 个答案:

答案 0 :(得分:0)

对于第一部分,filter()返回一个过滤器对象(它是一个迭代器)而不是列表

>>> filter(lambda x : x < 5 , [1,2,3,4,5,6,7,8])
<filter object at 0x7eff8b5922e8>
>>> list(filter(lambda x : x < 5 , [1,2,3,4,5,6,7,8]))
[1, 2, 3, 4]

您可以检查python docs以获得更多信息。这仅在Python3中。

第二部分相似。 filter()将迭代生成器,并创建另一个包含过滤数据的迭代器。