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