Discuss / Python / 为什么把 求素数函数当中子函数_not_divisible(n)的调用,改成lambda表达式得到的结果是错的

为什么把 求素数函数当中子函数_not_divisible(n)的调用,改成lambda表达式得到的结果是错的

Topic source

Bob

#1 Created at ... [Delete] [Delete and Lock User]
为什么求素数的算法当中,把_  
it = filter(_not_divisible(n), it)
改成
it = filter( lambda x:x%n>0, it)
得出的结果是错的?

ksi

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

假设 filter 过滤到了第三轮,这三轮 n 分别为 3, 5, 7

前者相当于是 

it = filter(_not_divisible(7), filter(_not_divisible(5), filter(_not_divisible(3), it)))

即:

it = filter(lambda x: x % 7 > 0, filter(lambda x: x % 5 > 0, filter(lambda x: x % 3 > 0, it)))

而后者由于 n 一直在变化,相当于:

it = filter(lambda x: x % 7 > 0, filter(lambda x: x % 7 > 0, filter(lambda x: x % 7 > 0, it)))


  • 1

Reply