Python lambda函数

时间:2011-06-05 14:17:59

标签: python lambda

这里发生了什么?

reduce(lambda x,y: x+y, [x for x in range(1,1000) if x % 3 == 0 or x % 5 == 0])

我理解x是如何迭代从1到999的所有数字并取出那些可以被3或5整除的数字,但是'lambda x,y:x + y'部分正在困扰我。

3 个答案:

答案 0 :(得分:18)

这对于

来说是糟糕的Python
sum(x for x in range(1,1000) if x % 3 == 0 or x % 5 == 0)

它简单地将1..999范围内的所有数字加以3或5整除。

reduce()将给定函数应用于iterable的前两项,然后应用于结果和iterable的下一项,依此类推。在这个例子中,函数

lambda x, y: x + y

只需添加其操作数。

答案 1 :(得分:9)

f = lambda x, y : x + y

几乎与说

相同
def f(x, y):
    return x + y
换句话说,{p>返回一个函数,该函数给出lambda符号左侧的参数将返回右侧表达式的值。

然而,关于函数是非常有限的,例如只允许一个表达式而不允许语句。这不是一个严重的问题,因为在Python中你甚至可以在另一个函数的中间定义一个完整的函数,然后传递它。

你所展示的用法非常糟糕,因为lambda毫无意义...... Python允许直接计算这个总和,而不是使用:

顺便说一下,对于计算的结果,有一个简单的封闭形式的解决方案,根本不需要任何迭代......(提示:从1到n的所有数字的总和是{{ 1}}和从5到n的5的所有倍数的总和是5 *(从1到n / 5的所有数字的总和)...因此......)

答案 2 :(得分:5)

lambda表示匿名函数。语法lambda x,y: x+y可以用英语表示为“声明一个名为xy的两个参数的无名函数。执行操作x+y。这个无名函数的返回值将通过此操作的结果“

reduce将一些函数按顺序应用于提供列表的前两个元素,然后应用于该函数和第三个元素的结果,依此类推。因此,提供的代码中的lambda由reduce用于将所提供列表的元素加在一起,这些元素将包含3和5的所有小数,小于1000.