我理解他们做了什么以及如何使用它们,但我仍然对它们为什么包含在Python中感到困惑。在正常的函数定义风格上使用它们有什么好处?
我能想到的唯一真正的区别是你可以在表达式中创建它们。例如,如果myList是一个int列表,并且您想要为每个元素添加一个,则可以使用
list(map(lambda x: x+1, myList))
然而,如果你想用函数定义来做,你必须在别处定义它,然后传递那个变量。
然而,我非常怀疑这种相对较小的便利是否有理由将它们包含在语言中,所以我猜测有些东西我不知道。或者,也许,我低估了能够在像这样的行内创建函数的有用性。
所以,这基本上是我的问题 - 什么是lambdas应该用于什么?为什么包括它们?
答案 0 :(得分:9)
对此没有深刻的答案。很久以前,有人贡献了代码来实现lambda
,并在一个微弱的时刻;-) Guido(van Rossum)应用了补丁。这就是它的全部内容。
有时方便,虽然它主要是过度使用。例如,在各种GUI系统中,您经常希望传递一个简单的回调函数,以便在单击GUI中的某个元素时触发。 lambda
对此非常好。
仅供参考,这是Guido当时为Python 1.0.0版(1994年1月26日)发布的条目。您可以在Python发行版的Misc/HISTORY
文件中找到它:
有一个新关键字'lambda'。形式的表达
lambda参数:表达式
产生一个匿名函数。这实际上只是语法糖; 您也可以使用
定义本地函数def some_temporary_name(参数):返回表达式
Lambda表达式与map()结合使用特别有用, filter()和reduce(),如下所述。感谢Amrit Prem 提交此代码(以及map(),filter(),reduce()和 的xrange())!
因此责备Amrit Prem - LOL; - )
编辑并click here阅读Guido关于此主题的博文。令人好奇的是,他不记得要查看Misc/HISTORY
,忘记了补丁作者的名字,而且他的回忆已经过了好几年。好事我还在为他掩护; - )