尽管有2个参数,为什么lambda要求2个参数?

rit*_*att 9 python lambda map filter

这是我的代码:

filter(lambda n,r: not n%r,range(10,20))

我收到错误:

TypeError: <lambda>() takes exactly 2 arguments (1 given)

那么我试过:

foo=lambda n,r:not n%r

哪个工作正常.所以我认为这会奏效:

bar=filter(foo,range(10,20))

但又一次:

TypeError: <lambda>() takes exactly 2 arguments (1 given)

地图也会发生类似情况.但减少工作正常.我究竟做错了什么?我是否遗漏了使用过滤器或地图所需的重要内容?

Zau*_*bov 6

你为什么用2个参数?filter()并且只map()需要一个带有单个参数的函数,例如:

filter(lambda x: x >= 2, [1, 2, 3])
>>> [2, 3]
Run Code Online (Sandbox Code Playgroud)

要查找数字的因子(您也可以用lambda替换它):

def factors(x):
    return [n for n in range(1, x + 1) if x % n == 0]

factors(20)
>>> [1, 2, 4, 5, 10, 20]
Run Code Online (Sandbox Code Playgroud)


Tag*_*gar 5

如果对键值集运行map或filter,请在(k,v)周围加上括号,例如:

  .filter(lambda (k,v): k*2 + v)
Run Code Online (Sandbox Code Playgroud)