你能解释一下 lambda 表达式吗? [复制]

Posted

技术标签:

【中文标题】你能解释一下 lambda 表达式吗? [复制]【英文标题】:Can you explain lambda expressions? [duplicate] 【发布时间】:2010-09-16 06:56:59 【问题描述】:

我并没有真正得到 lambda 表达式。虽然它们从 ALGOL 时代就已经存在,但直到最近 Python 和 Ruby 变得非常流行时,我才开始听说它们。既然 C# 具有 => 语法,我的世界 (.NET) 中的人们越来越多地谈论 lamdba 表达式。

我已阅读有关 lambda 演算的 Wikipedia 文章,但我并不是真正的数学专家。从实际的角度来看,我并没有真正理解它。我什么时候使用 lambda 表达式?为什么?我怎么知道这是我应该做的?

您能否以前后格式举例说明如何使用 lambda 表达式解决问题?任何命令式语言都可以,但 C# 对我来说最容易理解。

【问题讨论】:

重复***.com/questions/167343/…***.com/questions/150129/what-is-a-lambda 谢谢,我阅读了这些链接,但他们没有回答我的问题。我的问题更具体一些,例如这种特定技术的用途以及该用途的确定。 【参考方案1】:

基本上就 C# 而言,lambda 表达式是一种创建委托(或表达式树,但我们暂时将其放在一边)的简单方法。

在 C# 1 中,我们只能从普通方法创建委托实例。 在 C# 2 中,我们获得了匿名方法。 在 C# 3 中,我们获得了 lambda 表达式,类似于更简洁的匿名方法。

当你想表达一些接受一个值并返回一个值的逻辑时,它们特别简洁。例如,在 LINQ 的上下文中:

                       // Only include children - a predicate
var query = dataSource.Where(person => person.Age < 18) 
                       // Transform to sequence of names - a projection
                      .Select(person => person.Name);

my article on closures 对此进行了更全面的讨论 - 以及其他方面。

【讨论】:

我看到了这个问题,我想,“哦!也许我可以击败 Jon Skeet!”但后来我没有。 :) +1 该代码看起来相当不错,尽管我正在考虑 Select 是否是正确的名称。如果您使用 Map,您将在代码中得到关系代数。 :) 对我来说,Map 建议创建一个从键到值的映射,您可以在其中按键查找。我个人更喜欢 Project()。 今年早些时候在 Lippert 的博客上进行了一个简短的、切线相关的讨论,关于阅读“=>”运算符:blogs.msdn.com/ericlippert/archive/2008/05/16/…【参考方案2】:

this question 的答案可能对您有用。

【讨论】:

【参考方案3】:

lambda 函数只是匿名函数。

例如,在 python 中,您希望将列表中的所有元素加倍。几乎有三种方法可以做到这一点:

列表表达式:

[2*x for x in list]

显式函数:

def double(x):
    return 2*x
map(double, list) # iirc

使用 lambda:

double = lambda x : 2*x
map(double, list)

因此,大多数语言中的 lambda 只是一种避免创建新函数的语法开销的方法。

【讨论】:

您的最终评论不一定正确。 lambda 还提供了在变量上创建闭包的能力。【参考方案4】:

这是我见过的关于如何理解在 C# 中使用 lambda 表达式的重要思想的更好解释之一:

http://www.developingfor.net/c-30/upgrade-your-c-skills-part-3-lambda-expressions.html

【讨论】:

【参考方案5】:

我在 .NET 中主要使用 lambda 表达式是在处理列表时。使用 lambda 表达式,您可以像构建 SQL 语句来搜索数据库表一样,在列表上构建查询。

【讨论】:

【参考方案6】:

lambda 表达式是一个函数值(与“int”和“string”是值的意义相同)。这意味着可以

定义一个包含 lambda 表达式的变量(这与定义一个函数相同) 从方法或函数返回 lambda 表达式 将 lambda 表达式作为参数发送给函数或方法

查看 map、filter 或 fold(在任何函数式语言中)等函数,了解 lambda 表达式如何用作其他函数的参数。

【讨论】:

以上是关于你能解释一下 lambda 表达式吗? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

任何人都可以解释python中的lambda函数吗? [复制]

这个斐波那契 Lambda 函数是如何工作的? [复制]

你能解释一下输出并指出错误吗

你能解释一下为啥 DirectoryInfo.GetFiles 会产生这个 IOException 吗?

你能解释一下STA和MTA吗?

你能解释一下这个 Go 指针操作的行为吗?