Discuss / Python / _not_divisible()函数到底是几个参数

_not_divisible()函数到底是几个参数

Topic source

Blown_Wang

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

这句里的_not_divisible()函数到底是几个参数啊?

it = filter(_not_divisible(n), it) # 构造新序列

它语句中的x是哪里来的呢?

def _not_divisible(n):
    return lambda x: x % n > 0

传递的就是it迭代器中的项?

看了好几本python教程,所有的filter函数都是直接传递函数名的,第一个看到带参数作为形参的。

每调用一次next(it)就计算一次下一个符合条件的素数。而这里就是通过filter()的筛选函数功能当前n值得倍数剔除掉。

你可以这样子理解,当对生成奇数7的时候,系程序会对7%3>0进行判断筛选,在对7%5>0进行判断筛选,然后通过筛选,输出7为下一个素数。

it = filter(_not_divisible(n), it)

这上面的语句,在执行时,可以理解为,每生成一个数列值都进行了一系列的嵌套的条件判断进行筛选。

一开始是n=3,但是此时 it 还没有筛选函数,所以直接输出3. 

之后执行 it = filter(_not_divisible(n), it)给it添加了筛选函数 lambda x: x % 3 > 0.  

再在执行next(it),n=n+2=5; 当执行 yield n=5 时,进行筛选.5%3=2>0 返回true。即 n = next(it) = 5;

然后给it添加了筛选函数 lambda x: x % 5 > 0. 并且包含之前的lambda x: x % 3 > 0.   

依次类推。  最好运行调试一下看看。

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

这里用到了返回函数的知识,在后面

def _not_kechu(n):    def fanhui(x):        return x%n>0    return fanhui

改成这样也可以的

def _not_kechu(n):
def fanhui(x):
return x%n>0
return fanhui


  • 1

Reply