对于一个没有计算机科学背景的人来说,计算机科学界的lambda是什么?
当前回答
我很难理解lambda表达式,因为我在Visual FoxPro中工作,它具有宏替换以及ExecScript{}和Evaluate()函数,这两个函数似乎起着相同的作用。
? Calculator(10, 23, "a + b")
? Calculator(10, 23, "a - b");
FUNCTION Calculator(a, b, op)
RETURN Evaluate(op)
使用正式lambda的一个明确好处是(我假设)编译时检查:Fox在尝试运行之前不会知道您是否键入了上面的文本字符串。
这对于数据驱动的代码也很有用:您可以将整个例程存储在数据库中的备注字段中,然后在运行时对其求值。这允许您调整应用程序的一部分,而无需实际访问源代码。(但这完全是另一个话题。)
其他回答
在计算机编程中,lambda是一段代码(语句、表达式或一组代码),它从外部源获取一些参数。它不能总是一个匿名函数——我们有很多方法来实现它们。
我们在表达式、语句和函数之间有明确的区分,而数学家没有这种区分。
编程中的“函数”一词也有所不同——我们有“函数是一系列要做的步骤”(来自拉丁语“perform”)。在数学中,它是关于变量之间的相关性。
函数语言正试图尽可能地与数学公式相似,它们的单词意思几乎相同。但在其他编程语言中,我们有不同之处。
对于一个没有计算机科学背景的人来说,计算机科学界的lambda是什么?
我将用简单易读的python代码一步一步直观地说明它。
简而言之,lambda只是一个匿名内联函数。
让我们从作业开始,了解兰达斯作为一名有基础算术背景的新生。
任务蓝图为“名称=值”,请参见:
In [1]: x = 1
...: y = 'value'
In [2]: x
Out[2]: 1
In [3]: y
Out[3]: 'value'
“x”、“y”是名称,“1”、“value”是值。尝试数学中的函数
In [4]: m = n**2 + 2*n + 1
NameError: name 'n' is not defined
错误报告,不能将数学直接作为代码编写,“n”应该被定义或赋值。
In [8]: n = 3.14
In [9]: m = n**2 + 2*n + 1
In [10]: m
Out[10]: 17.1396
它现在起作用了,如果你坚持将两条seperarte线合并为一条呢。lambda来了
In [13]: j = lambda i: i**2 + 2*i + 1
In [14]: j
Out[14]: <function __main__.<lambda>>
未报告错误。
这是对lambda的一瞥,它使您能够像在数学中那样在单行中直接将函数写入计算机。
我们稍后再看。
让我们继续深入了解“任务”。
如上所示,等号=适用于简单数据(1和“value”)类型和简单表达式(n**2+2*n+1)。
试试看:
In [15]: x = print('This is a x')
This is a x
In [16]: x
In [17]: x = input('Enter a x: ')
Enter a x: x
它适用于简单的语句,在python7中有11种类型。简单语句-Python 3.6.3文档
复合陈述如何,
In [18]: m = n**2 + 2*n + 1 if n > 0
SyntaxError: invalid syntax
#or
In [19]: m = n**2 + 2*n + 1, if n > 0
SyntaxError: invalid syntax
出现了def使其工作
In [23]: def m(n):
...: if n > 0:
...: return n**2 + 2*n + 1
...:
In [24]: m(2)
Out[24]: 9
Tada,分析一下,“m”是名称,“n**2+2*n+1”是值是“=”的变体。找到它,如果只是为了理解,一切都从任务开始,一切都是任务。
现在返回lambda,我们有一个名为“m”的函数
Try:
In [28]: m = m(3)
In [29]: m
Out[29]: 16
这里有两个“m”的名称,函数m已经有一个重复的名称。
它的格式如下:
In [27]: m = def m(n):
...: if n > 0:
...: return n**2 + 2*n + 1
SyntaxError: invalid syntax
这不是一个明智的策略,因此错误报告
我们必须删除其中一个,设置一个没有名称的函数。
m = lambda n:n**2 + 2*n + 1
它叫做“匿名函数”
总之,
内联函数中的lambda,它使您能够像数学中那样在一条直线上编写函数lambda是匿名的
希望,这有帮助。
我喜欢这篇文章中对Lambdas的解释:LINQ的演变及其对C#设计的影响。这对我来说很有意义,因为它为Lambdas展示了一个真实的世界,并将其作为一个实际的例子。
他们的快速解释:Lambdas是将代码(函数)视为数据的一种方式。
lambda函数可以接受任意数量的参数,但它们只包含一个表达式。。。Lambda函数可用于返回函数对象。语法上,lambda函数仅限于一个表达式。
在CS的上下文中,lambda函数是一个抽象的数学概念,它解决了数学表达式的符号求值问题。在这种情况下,lambda函数与lambda项相同。
但在编程语言中,这是不同的。这是一段被宣布为“到位”的代码,可以作为“一流公民”传递。这个概念似乎很有用,因此它几乎进入了所有流行的现代编程语言(参见lambda函数everwhere post)。