Discuss / Python / 关于求素数的筛选器的匿名函数突然搞不懂了,,

关于求素数的筛选器的匿名函数突然搞不懂了,,

Topic source
# 构造一个生成器,生成以三开始的所有奇数def odd_iter():    """    返回以三开始的所有奇数    :return:    """    i = 1    while 1:        i += 2        yield i# 筛选器,def not_divisible(n):    a = lambda x: x % n > 0    return a# 素数生成器def primes():    yield 2    li = odd_iter()    while 1:        n = next(li)        yield n        li = filter(not_divisible, li)

在li = filter(not_divisable,li)调用的时候 

def not_divisable(n):

return lambda x: x % n > 0

只传入了一个 n 啊,那x是什么,而且我直接调用这个函数的时候返回的是一个函数啊

皆由唧唧

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

同问

这里 not_divisable()的返回值是一个匿名函数(也就是lamda表达式),相当于not_divisable(n)是一个函数名,not_divisable(n)(x)才是调用了匿名函数(lamda表达式)

以及,

li = filter(not_divisible, li)改成li = filter(not_divisible(n), li)才能得到正确结果

  • 1

Reply