Discuss / Python / 前面有个求素数,用了return lambda x: x % n > 0

前面有个求素数,用了return lambda x: x % n > 0

Topic source

DreamZzzz

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

自己本来写的是

def is_odd(): return lambda n:n%2==1

L = list(filter(is_odd, range(1, 20))) 错误答案 但是想到上一节中求素数,这个能运行

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

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

然后把L = list(filter(is_odd, range(1, 20)))改成 L = list(filter(is_odd(), range(1, 20)))后也能运行 应该是不加括号时,是一个函数名,filter默认把range里的参数给了is_odd函数,返回的就是lambda n:n%2==1,这一串是个函数名,但是此时fliter不会再传参数进去了(感觉)。加()后,自己感觉是先执行is_odd()函数,返回一个函数名,就变成了list(filter(lambda n : n % 2 == 1, range(1, 20))),后面就好理解了。

list(filter(is_odd(), range(1, 20)))表示先运行is_odd()求值 list(filter(is_odd, range(1, 20)))表示直接返回函数指针,然后再求值


  • 1

Reply