Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么lambda要求两个参数,尽管有两个参数?_Python_Map_Filter_Lambda - Fatal编程技术网

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]  
>>>