Python 为什么lambda要求两个参数,尽管有两个参数?
这是我的代码:Python 为什么lambda要求两个参数,尽管有两个参数?,python,map,filter,lambda,Python,Map,Filter,Lambda,这是我的代码: 过滤器(λn,r:非n%r,范围(10,20)) 我得到一个错误: TypeError:()正好接受2个参数(给定1个) 于是我试着: foo=lambda n,r:不是n%r 效果很好。所以我认为这会起作用: bar=过滤器(foo,范围(10,20)) 但是,再一次: TypeError:()正好接受2个参数(给定1个) map也发生了类似的情况。但是,减少工作很好。我做错了什么?我是否遗漏了使用filter或map所需的一些关键信息?因为python中的filter只需要一
过滤器(λn,r:非n%r,范围(10,20))
我得到一个错误:
TypeError:()正好接受2个参数(给定1个)
于是我试着:
foo=lambda n,r:不是n%r
效果很好。所以我认为这会起作用:
bar=过滤器(foo,范围(10,20))
但是,再一次:
TypeError:()正好接受2个参数(给定1个)
map也发生了类似的情况。但是,减少工作很好。我做错了什么?我是否遗漏了使用filter或map所需的一些关键信息?因为python中的
filter
只需要一个参数。因此,如果要在筛选器中使用lambda/函数,则需要定义一个只接受一个参数的lambda/函数。为什么要使用两个参数filter()
和map()
只需要具有单个参数的函数,例如:
filter(lambda x: x >= 2, [1, 2, 3])
>>> [2, 3]
要查找数字的因子(也可以用lambda替换):
lambda函数接受两个参数
n
和r
filter
必须使用一个函数调用,该函数接受一个参数,并在应保留项时返回True
。可能您想在lambda函数外部定义r
或n
,然后在闭包中捕获它。如果对键值集运行map或filter,则
在(k,v)周围添加括号,如:
这是因为map函数的实现性质,map、reduce和filter的第二个参数是list,但它读取值和将值传递给这些方法的第一个参数的方式不同,如果您看到下面的内容,则reduce函数默认从list中选取2个元素并传递给lambda,但是filter和map只需要一个元素
>>>reduce(lambda x,y: x+ y,range(10))
45
>>>filter(lambda x,y: x+ y,range(10))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: <lambda>() takes exactly 2 arguments (1 given)
>>>filter(lambda x: x+ 1,range(10))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>>
>>>map(lambda x,y: x+ y,range(10))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: <lambda>() takes exactly 2 arguments (1 given)
>>>
>>>map(lambda x: x+1, range(10))
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>>
减小(λx,y:x+y,范围(10))
45
>>>滤波器(λx,y:x+y,范围(10))
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
TypeError:()正好接受2个参数(给定1个)
>>>滤波器(λx:x+1,范围(10))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>>
>>>地图(λx,y:x+y,范围(10))
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
TypeError:()正好接受2个参数(给定1个)
>>>
>>>地图(λx:x+1,范围(10))
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>>
filter()
将一个参数传递给lambda,而lambda需要两个参数。使用变量不会让你绕过它。好吧,这是有道理的。那么我该如何编写这段代码,它必须返回数字的因子。我想使用filter或map,以便更好地理解它……或者至少lambdaOf当然,您可以优化它,只搜索sqrt(x),并在x%n==0时将x/n和n添加到结果中。当数字变大时,会产生不同。您的原始问题可以通过以下列表理解来解决>>>[n表示范围内的n(10,20),r表示范围内的r(10,20),如果不是n%r][10,11,12,13,14,15,16,17,18,19]>>
.filter(lambda (k,v): k*2 + v)
>>>reduce(lambda x,y: x+ y,range(10))
45
>>>filter(lambda x,y: x+ y,range(10))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: <lambda>() takes exactly 2 arguments (1 given)
>>>filter(lambda x: x+ 1,range(10))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>>
>>>map(lambda x,y: x+ y,range(10))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: <lambda>() takes exactly 2 arguments (1 given)
>>>
>>>map(lambda x: x+1, range(10))
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>>