在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/數(shù)據(jù)分析&挖掘  Python/ Python用filter求素數(shù)

Python用filter求素數(shù)

廖雪峰的Python教程中關于使用filter求素數(shù)的例子不太明白,

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 < 30:
        print(n)
    else:
        break

關于這句it = filter(_not_divisible(n), it),既然it是一個iterator那就是惰性計算的,那么每次運行到這句時,filter只是對it代表的無限列表的當前yield出來的一個值進行了過濾,那么為什么最后可以得到通過了所有篩選條件的無限列表?

回答
編輯回答
念初

filter和map是類似的,返回的也是一個迭代器,對傳入的可迭代對象的每一項用指定的函數(shù)進行篩選,轉化為list或者使用for循環(huán)就會一次性對每一項進行篩選,你可以試一試這一段代碼

for x in filter(lambda x % 2 == 0, range(10)):
    print(x)
2017年1月3日 02:40
編輯回答
深記你

按照官方文檔所說的:
filter(function, iterable)等價于(item for item in iterable if function(item))

2017年9月23日 22:03