我对编程相当陌生,虽然读了很多书,但 lambda 的概念不断出现,但我很难弄清楚它到底是什么以及实现它如何使我的编程生活变得如此好多了。首先,什么是 lambda,其次它是如何实现的?
感谢所有发帖的人。正如评论中提到的,这是重复的,但这里有很多很棒的答案,我想为社区保留它们,所以我将其变成社区帖子。这是另一个问题的链接:
最佳答案
Lambda 很难捕捉,但一旦你想象出它们的样子,你就无法理解为什么你以前没有捕捉到它。
Lamdba 是匿名函数
Lambda 是普通函数,唯一的区别是您没有给它们命名。
要理解这一点,您必须首先知道,当您创建函数时,代码存储在内存中只有计算机知道的地址。
所以当你做类似的事情时:
function Foo ()
{
/* your code here */
}
您真正要做的是将名称“Foo”绑定(bind)到内存中代码的地址。
现在,还有另一种访问地址的方法:引用(和指针,但让我们跳过这个讨厌的家伙)
好吧,lambda 函数是一个没有名称的函数,因此只能通过其引用来访问它。
你如何使用它们?
当您创建 lambda 函数时,您通常计划仅使用它一次。
分步过程通常是:
- 创建函数
- 获取引用
- 将引用传递到将要使用的地方
最后,引用丢失,函数自动销毁。
典型的用例是回调函数。您可以在一行中声明、创建和传递该函数,因此非常方便。
真实的例子
在 Python 中,您可以在列表推导式中使用 lambda :
/* create a list of functions */
function_list = [(lambda x : number_to_add + x) for number_to_add in range(0, 10) ]
在 Javascript 中,您通常将一个函数传递给其他函数。 JQuery 示例:
$("img").each(
/* here we pass a function without any name to the "each()" method */
function(i){ his.src = "test" i ".jpg"; }
);
你最好知道的事情
某些语言,如 Javascript 或 Lisp,大量使用 lambda 。这可能是出于文化原因,但函数式编程范式往往会导致 lambda 狂热。
长 lambda 表达式使代码难以阅读。这就是为什么有些语言限制 lambda 的可能性,例如 Python 不允许在其中使用“if”语句。
Lambda 只是普通函数。无论您在哪里使用它,都可以使用普通函数来代替。这只是编码风格的问题。
关于lambda - 什么是 lambda 以及什么是示例实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/373832/