问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

Lambda 表达式有何用处?如何使用

发布网友 发布时间:2022-04-23 00:38

我来回答

2个回答

热心网友 时间:2022-04-27 00:34

  简单来说,编程中提到的 lambda 表达式,通常是在需要一个函数,但是又不想费神去命名一个函数的场合下使用,也就是指匿名函数。这一用法跟所谓 λ 演算(题目说明里的维基链接)的关系,有点像原子弹和质能方程的关系,差别其实还是挺大的。

  不谈形式化的 λ 演算,只说有实际用途的匿名函数。先举一个普通的 Python 例子:将一个 list 里的每个元素都平方:
  map( lambda x: x*x, [y for y in range(10)] )
  这个写法要好过
  def sq(x):
  return x * x

  map(sq, [y for y in range(10)])
  ,因为后者多定义了一个(污染环境的)函数,尤其如果这个函数只会使用一次的话。而且第一种写法实际上更易读,因为那个映射到列表上的函数具体是要做什么,非常一目了然。如果你仔细观察自己的代码,会发现这种场景其实很常见:你在某处就真的只需要一个能做一件事情的函数而已,连它叫什么名字都无关紧要。Lambda 表达式就可以用来做这件事。

  进一步讲,匿名函数本质上就是一个函数,它所抽象出来的东西是一组运算。这是什么意思呢?类比
  a = [1, 2, 3]
  和
  f = lambda x : x + 1
  ,你会发现,等号右边的东西完全可以脱离等号左边的东西而存在,等号左边的名字只是右边之实体的标识符。如果你能习惯 [1, 2, 3] 单独存在,那么 lambda x : x + 1 也能单独存在其实也就不难理解了,它的意义就是给「某个数加一」这一运算本身。

  现在回头来看 map() 函数,它可以将一个函数映射到一个可枚举类型上面。沿用上面给出的 a 和 f,可以写:
  map(f, a)
  也就是将函数 f 依次套用在 a 的每一个元素上面,获得结果 [2, 3, 4]。现在用 lambda 表达式来替换 f,就变成:
  map( lambda x : x + 1, [1, 2, 3] )
  会不会觉得现在很一目了然了?尤其是类比
  a = [1, 2, 3]
  r = []
  for each in a:
  r.append(each+1)
  这样的写法时,你会发现自己如果能将「遍历列表,给遇到的每个元素都做某种运算」的过程从一个循环里抽象出来成为一个函数 map,然后用 lambda 表达式将这种运算作为参数传给 map 的话,考虑事情的思维层级会高出一些来,需要顾及的细节也少了一点。Python 之中,类似能用到 lambda 表达式的「高级」函数还有 rece、filter 等等,很多语言也都有这样的工具(不过这些特性最好不要在 Python 中用太多,原因详见 http://www.hu.com/question/19794855/answer/12987428 的评论部分)。这种能够接受一个函数作为参数的函数叫做「高阶函数」(higher-order function),是来自函数式编程(functional programming)的思想。

  和其他很多语言相比,Python 的 lambda *多多,最严重的当属它只能由一条表达式组成。这个*主要是为了防止滥用,因为当人们发觉 lambda 很方便,就比较容易滥用,可是用多了会让程序看起来不那么清晰,毕竟每个人对于抽象层级的忍耐 / 理解程度都有所不同。
转载

热心网友 时间:2022-04-27 01:52

  简单来说,编程中提到的 lambda 表达式,通常是在需要一个函数,但是又不想费神去命名一个函数的场合下使用,也就是指匿名函数。这一用法跟所谓 λ 演算(题目说明里的维基链接)的关系,有点像原子弹和质能方程的关系,差别其实还是挺大的。

不谈形式化的 λ 演算,只说有实际用途的匿名函数。先举一个普通的 Python 例子:将一个 list 里的每个元素都平方:
map( lambda x: x*x, [y for y in range(10)] )

这个写法要好过
def sq(x):
return x * x

map(sq, [y for y in range(10)])

,因为后者多定义了一个(污染环境的)函数,尤其如果这个函数只会使用一次的话。而且第一种写法实际上更易读,因为那个映射到列表上的函数具体是要做什么,非常一目了然。如果你仔细观察自己的代码,会发现这种场景其实很常见:你在某处就真的只需要一个能做一件事情的函数而已,连它叫什么名字都无关紧要。Lambda 表达式就可以用来做这件事。

进一步讲,匿名函数本质上就是一个函数,它所抽象出来的东西是一组运算。这是什么意思呢?类比
a = [1, 2, 3]


f = lambda x : x + 1

,你会发现,等号右边的东西完全可以脱离等号左边的东西而存在,等号左边的名字只是右边之实体的标识符。如果你能习惯 [1, 2, 3] 单独存在,那么 lambda x : x + 1 也能单独存在其实也就不难理解了,它的意义就是给「某个数加一」这一运算本身。

现在回头来看 map() 函数,它可以将一个函数映射到一个可枚举类型上面。沿用上面给出的 a 和 f,可以写:
map(f, a)

也就是将函数 f 依次套用在 a 的每一个元素上面,获得结果 [2, 3, 4]。现在用 lambda 表达式来替换 f,就变成:
map( lambda x : x + 1, [1, 2, 3] )

会不会觉得现在很一目了然了?尤其是类比
a = [1, 2, 3]
r = []
for each in a:
r.append(each+1)

这样的写法时,你会发现自己如果能将「遍历列表,给遇到的每个元素都做某种运算」的过程从一个循环里抽象出来成为一个函数 map,然后用 lambda 表达式将这种运算作为参数传给 map 的话,考虑事情的思维层级会高出一些来,需要顾及的细节也少了一点。Python 之中,类似能用到 lambda 表达式的「高级」函数还有 rece、filter 等等,很多语言也都有这样的工具(不过这些特性最好不要在 Python 中用太多,原因详见 http://www.hu.com/question/19794855/answer/12987428 的评论部分)。这种能够接受一个函数作为参数的函数叫做「高阶函数」(higher-order function),是来自函数式编程(functional programming)的思想。

和其他很多语言相比,Python 的 lambda *多多,最严重的当属它只能由一条表达式组成。这个*主要是为了防止滥用,因为当人们发觉 lambda 很方便,就比较容易滥用,可是用多了会让程序看起来不那么清晰,毕竟每个人对于抽象层级的忍耐 / 理解程度都有所不同。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
"你是在哪看到我的照片?"怎么说英语 留恋地看着我的照片用英语怎么说? 高德iphone地图下载 苹果手机高德地图怎么下载地图 孕中期适合出游吗 哪些孕妇不适合长途旅行 孕妇坐长途车旅行的好处 孕妇出游的最佳时间 孕晚期适合出游吗 孕妇外出旅行禁忌 小米11烧wifi啥表现 关于python3 的 lambda 函数 Python中的lambda到底怎么用? python中使用lambda实现标准化? oppo手机出现简体中文怎么回事开机不起 OPPO手机为什么一打开就会出现简体中文? oppo手机怎么把繁体字改成简体字? oppo手机开机出现简体中文怎么回事? OPPO手机一开机就出现简体中文,点开简体中文出现OPPO恢复模式,改怎么... oppo手机开机显示简体中文 请问OPPO手机老是显示请选择语言:简体中文,繁体中文,英语。怎么弄?_百 ... OPPO手机为什么会出现简体中文字样? OPPO手机,怎么把繁体中文,换成简体中文? OPPO手机一开机就出现简体中文,点开中文简体,出现oppo恢复模式,怎么... oppo手机出现简体中文怎么能退出来? oppo手机一开机出现简体中文 这是什么东西,长得像树叶,可是又像虫子。 头长得像两片叶子的是什么昆虫?身体像水蛭 有哪些长相比较逆天的昆虫 什么是交强险,只买交强险可以吗? 跟小拇指差不多大,翅膀像树叶,背部有毛,这是什么虫子? python 高阶函数什么意思 Python中什么情况下应该使用匿名函数lambda python 定义lambda函数最大值和最小值输入abc 假设python没有提供map()函数,请自行编写一个my_map()函数实现与map... 开早餐店,一般都是早上几点起床,要准确的。。 肯德基早餐几点到几点? 做早餐生意早上几点起床 支付宝消费金有什么坏处 早上摆卖早餐,几点开始 麦当劳早餐几点开始? 早餐几点开始 开早餐包子铺几点起床可以? 早餐一般几点吃是最合适的 麦当劳早餐几点到几点? 柠檬和红糖可以一起泡水喝吗? 吃早餐的正确时间是几点到几点呢? 你早餐,一般几点订外卖? 吃早餐的最佳时间是几点? 支付宝消费者保证金怎么退 柠檬加红糖水喝有什么功效?