Python lambda 函数

17 投票
3 回答
19509 浏览
提问于 2025-04-16 18:59

这里发生了什么呢?

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 个回答

5

一个 lambda 是用来表示一个没有名字的函数。它的写法 lambda x,y: x+y 可以用简单的话说就是:“声明一个没有名字的函数,这个函数有两个参数,叫做 xy。这个函数会执行 x+y 的操作。这个没有名字的函数的返回值就是这个操作的结果。”

reduce 是一个函数,它会把某个函数依次应用到提供的列表的前两个元素上,然后再把这个函数的结果和第三个元素一起处理,依此类推。因此,在提供的代码中,reduce 使用了这个 lambda 函数来把列表中的元素加起来,这个列表里会包含所有小于1000的3和5的倍数。

10

f = lambda x, y : x + y

几乎和说

def f(x, y):
    return x + y

是一样的。换句话说,lambda 返回一个函数,这个函数根据冒号左边的参数,会返回冒号右边表达式的值。

不过,关于函数的使用是比较有限的,比如它只允许一个表达式,不允许有其他语句。不过这并不是大问题,因为在 Python 中,你可以在一个函数里定义一个完整的函数,并且可以把它传递进去。

不过,你展示的用法其实挺糟糕的,因为在那种情况下用 lambda 是没有意义的…… Python 允许直接计算那个和,而不是用 reduce

另外,顺便提一下,那个计算的结果其实有一个简单的公式解,不需要任何迭代……(提示:从 1 到 n 的所有数字的和是 n*(n+1)/2,而从 5 到 n 的所有 5 的倍数的和是 5*(从 1 到 n/5 的所有数字的和)……所以……)

18

这段Python代码写得不好。

sum(x for x in range(1,1000) if x % 3 == 0 or x % 5 == 0)

它只是把1到999之间所有能被3或5整除的数字加起来。

reduce()这个函数会把你给的函数先应用到可迭代对象中的前两个元素上,然后把得到的结果和下一个元素再进行运算,依此类推。在这个例子中,

lambda x, y: x + y

这个函数就是简单地把它的两个输入相加。

撰写回答