python问题: filter+无限生成器,循环filter

2025-03-26 07:10:56
推荐回答(2个)
回答1:

  •   前面的问题我已经在另外的提问里答过了

  • 根据你最新的追问,“为什么it=filter(lambda x : x%n>0 ,it)不行??“直接在filter里用Lambda表达式是完全可以的,你的原因是你的Lambda表达式漏输入了一个n,请看如下形式.

# Python 2.x下需导入itertools库的ifilter才能和python 3.x的filter等效
import itertools
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=itertools.ifilter(_not_divisible(n),it)
        it = itertools.ifilter(lambda x, n=n: x%n > 0, it)
for n in primes():
    if n<1000:
        print(n)
    else:
        break

回答2:

it=filter(lambda x : x%n>0 ,it)改成这样就明白了:
it=filter(lambda x,y=n : x%y>0 ,it)