实在想不通,想请教缪老师,为什么这样写(没使用返回函数)不行呢?
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???
不好意思,打错了,是「廖」老师……
我也发现这个问题了,迷惑。。
可能跟python存储函数的机制有关吧,我感觉定义了函数之后,filter才能存储住每一次n的值,如果使用lambda可能就重新定义了,类似于覆盖,同求解
Sign in to make a reply
laputa6616
实在想不通,想请教缪老师,为什么这样写(没使用返回函数)不行呢?
以上,貌似 while 循环里面每一次迭代,只针对当前的 n 值有效,之前小于 n 值所以进行的 fliter 全部失效……也就是每次迭代仅只是针对最初始的 _odd_iter() 用当前的 n 值重新 filter 一次……why???