【问题标题】:Python - What are lambdas for? [closed]Python - 什么是 lambda? [关闭]
【发布时间】:2013-12-02 03:58:09
【问题描述】:

我了解它们的作用以及如何使用它们,但我仍然对为什么将它们包含在 Python 中感到有些困惑。与普通的函数定义风格相比,使用它们有什么好处?

我能想到的唯一真正区别是您可以在表达式中创建它们。例如,如果 myList 是一个整数列表,并且您想为每个元素添加一个,则可以使用

list(map(lambda x: x+1, myList))

如果你想用函数定义来做到这一点,你必须在别处定义它,然后传递那个变量。

但是,我严重怀疑这种相对较小的便利是否能证明将它们包含在语言中是合理的,所以我猜我缺少一些东西。或者,也许,我低估了能够在这样的行内创建函数的用处。

所以,这基本上是我的问题 - lambda 应该用于什么?为什么包括它们?

【问题讨论】:

  • 真的就是这样。
  • 一个 lambda 是一个匿名函数,这意味着你只是暂时需要它。它有点像 Python 中的函数式编程。
  • 你没有错过任何东西。我相信我在某个地方读到 Guido 实际上想根据您的确切推理为 Python 3 对它们进行核对。
  • 看在上帝的份上,将其搁置为“基于意见”是愚蠢的:虽然人们可以对他们是否喜欢 lambda有意见,但问题是他们为什么喜欢在语言中。我解释了这一点(当时我在那里),并提供了一个指向 Python 的创建者解释为什么它们使用该语言的博客文章的链接。这不是意见,这是事实。

标签: python lambda


【解决方案1】:

对此没有深刻的答案。很久以前,有人贡献了代码来实现lambda,并且在一个弱点;-) Guido (van Rossum) 应用了这个补丁。仅此而已。

有时很方便,尽管它大多被过度使用。例如,在各种 GUI 系统中,您经常希望传递一个简单的回调函数,以便在单击 GUI 中的某个元素时触发。 lambdas 非常适合。

仅供参考,这是 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 ;-)

编辑click here 阅读 Guido 关于该主题的博客文章。奇怪的是他不记得看Misc/HISTORY,忘记补丁作者的名字,而且他的记忆已经好几年了。还好我还在为他掩护 ;-)

【讨论】:

  • It's Tim! 见到你总是有点奇怪。
  • @user2357112 感谢您指出这一点,不是开玩笑;考虑到他为 Python 做出了贡献。
  • 哦!哦!这被否决了 - 这很有趣;-)
  • @TimPeters This questioner 想知道为什么 Python 的 map 使用 None 作为填充。我仍在寻找,找不到原因。有时间请看一下:-)
猜你喜欢
  • 1970-01-01
  • 2012-12-29
  • 2011-04-19
  • 1970-01-01
  • 1970-01-01
  • 2014-07-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-05
相关资源
最近更新 更多