这是我的代码:
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)
map 也会发生类似的事情。但是减少工作正常。我究竟做错了什么?我是否遗漏了使用过滤器或 map 所需的关键内容?
最佳答案
为什么要使用 2 个参数? filter()
和 map()
需要一个只有一个参数的函数,例如:
filter(lambda x: x >= 2, [1, 2, 3])
>>> [2, 3]
求一个数的因数(你也可以用 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]
关于python - 为什么 lambda 要求 2 个参数,尽管给出了 2 个参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12751787/