Discuss / Python / 求教缪老师,关于 primes() 不使用「返回函数」的疑惑……

求教缪老师,关于 primes() 不使用「返回函数」的疑惑……

Topic source

laputa6616

#1 Created at ... [Delete] [Delete and Lock User]

实在想不通,想请教缪老师,为什么这样写(没使用返回函数)不行呢?

def primes():
    yield 2
    it = _odd_iter()
    while True:
        n = next(it)
        yield n
        it = filter(lambda x: x % n != 0, it)

以上,貌似 while 循环里面每一次迭代,只针对当前的 n 值有效,之前小于 n 值所以进行的 fliter 全部失效……也就是每次迭代仅只是针对最初始的 _odd_iter() 用当前的 n 值重新 filter 一次……why???

laputa6616

#2 Created at ... [Delete] [Delete and Lock User]

不好意思,打错了,是「廖」老师……

冰冰洁123

#3 Created at ... [Delete] [Delete and Lock User]

我也发现这个问题了,迷惑。。

可能跟python存储函数的机制有关吧,我感觉定义了函数之后,filter才能存储住每一次n的值,如果使用lambda可能就重新定义了,类似于覆盖,同求解


  • 1

Reply