这里发生了什么?
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'部分正在困扰我。
答案 0 :(得分:18)
这对于
来说是糟糕的Pythonsum(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
可以用英语表示为“声明一个名为x
和y
的两个参数的无名函数。执行操作x+y
。这个无名函数的返回值将通过此操作的结果“
reduce
将一些函数按顺序应用于提供列表的前两个元素,然后应用于该函数和第三个元素的结果,依此类推。因此,提供的代码中的lambda由reduce用于将所提供列表的元素加在一起,这些元素将包含3和5的所有小数,小于1000.