概述

Lambda是一个表达式,也可以说它是一个匿名函数。然而在使用它或是阅读Lambda代码的时候,却显得并不那么容易。因为它匿名,因为它删减了一些必要的说明信息(比如方法名)。下面就来说说Lambda是如何进行转换和工作的吧。


版权说明

著作权归作者所有。
商业转载请联系作者获得授权,非商业转载请注明出处。
作者:Q-WHai
发表日期: 2016年3月10日
链接:https://qwhai.blog.csdn.net/article/details/50774827
来源:CSDN
更多内容:分类 >> Thinking In Python


目录

文章目录

  • 概述
  • 版权说明
  • 目录
    • @[toc]
  • Lambda
    • 初步认识
      • 表达式及定义
      • 实例说明
    • 变量作用域说明
    • Lambda评价
      • 优点
      • 缺点
  • Ref
  • 征集

Lambda

初步认识

表达式及定义

lambda [ arg1 [arg2, arg3, … argN] ] : expression
                      – 《Python核心编程》

从《Python核心编程》书本中包含了以上lambda表达式的表述。也就是说在lambda右侧的式子中,冒号左边的为参数值,右边的为计算表达式。


实例说明

1.单层参数求和
现在假设需要对两个数进行求和运算。对于正常的逻辑代码,不难写出如下代码:

def sum(x, y):return x + y

而在lambda中,我们可以这样来写:

p = lambda x, y: x + y

代码简洁了许多,可是因为缺少方法名对此步操作进行描述,也让我们对这个求和的Lambda表达式有一些疑问,也就是它在程序中目的是什么,我们难以揣测。

2.嵌套参数求和
需求还是之前的需求,可是我们在对参数的传递发生了变化。什么叫作嵌套参数,我们可以参考如下代码:
注:下面的一段代码实际上是存在语法错误的,此代码的目的纯粹只是为了说明问题。请勿模仿

def sum_outer(x=0):def sum_inner(y):return x + y

采用lambda改写后的代码如下:

def test_lamdba2(x=0):return lambda y: x + y

而两种代码逻辑的转换关系如下:

3.嵌套lambda
前面假想了一种方法内部嵌套方法的情况。我们说Lambda就是理解成在方法内部嵌套了一个“表达式方法”。所以,还可以能上面进行一层Lambda的方法进行改写。将代码中的方法test_lambda2改写成lambda。改写后的描述如下图所示:

将上图所示的转换过程与之前的转换进行一个分析,可以得到一个结论,在lambda的表达式中,前面的lambda为外层方法,后续lambda则为次外层方法,并以次由外向内递推。


变量作用域说明

关于变量在Lambda中的作用域从上面的几幅图中也可以看出一二来,主要可以做出以下几点的总结:

  1. 对局部变量可见
  2. 对全局变量可见
  3. 对当前层传入的参数可见
  4. 对上层函数传入的参数可见
  5. 对上层Lambda传入的参数可见

Lambda评价

优点

  1. 在普通代码里几行的代码,在Lambda中只需要一行就可以解决。所以代码比以前更简洁了
  2. 可以在某一个方法内部定义,这样可以提高操作的便捷性

缺点

  1. Lambda是一个匿名函数,因为是匿名,所以可读性变差了
  2. 有时候有多个Lambda嵌套(就像实例中的第3点一样),让程序变得难以理解

Ref

  • 《Python核心编程》
  • 《Python学习手册》

征集

如果你也需要使用ProcessOn这款在线绘图工具,可以使用如下邀请链接进行注册:
https://www.processon.com/i/56205c2ee4b0f6ed10838a6d

深入理解Lambda相关推荐

  1. [C# 基础知识系列]专题十四:深入理解Lambda表达式

    引言: 对于刚刚接触Lambda表达式的朋友们,可能会对Lambda表达式感到非常疑惑,它到底是个什么什么样的技术呢?以及它有什么好处和先进的地方呢?下面的介绍将会解除你这些疑惑. 一.Lambda表 ...

  2. 理解lambda在linq中的应用

    LinQ是必须学好的一种查询语言,不得不佩服微软的贡献.现阶段要学好Linq必须了解lambda,关于lambda本身,朋友可以找些资料自己看看,我这只是讲下他的本质. lambda本质上是一个委托, ...

  3. 最简单的理解lambda,map,reduce,filter,列表推导式

    Python 2.7 IDE Pycharm 5.0.3 为什么要用Lambda 一句话,因为懒,懒得新建一个一次性使用函数,懒得想函数名,想要更高逼格的pythontic! 比如说,我要实现一个x* ...

  4. 快速理解Lambda表达式

    函数式接口的定义: 任何接口,如果只包含唯一一个抽象方法,那么它就是一个函数式接口. 对于函数式接口,我们可以通过lamda表达式来创建该 接口的对象 lambda表达式指的是:在单一的抽象方法接口环 ...

  5. python lambda表达式及用法_Python:lambda表达式和yield关键字理解与使用讲解

    一.lambda表达式 1.1.lambda表达式理解 lambda的主体是一个表达式,而不是一个代码块,仅仅能在lambda表达式中封装有限的逻辑进去.如果要通俗的理解lambda表达式,可以结合C ...

  6. C# = Lambda表达式理解

    C# => Lambda表达式理解 主要的代码借鉴:http://www.cnblogs.com/knowledgesea/p/3163725.html 希望能够帮助理解lambda表达式. 定 ...

  7. 不少Java程序员都觉得Lambda表达式很鸡肋,它到底有何用呢?

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源:https://urlify.cn/B3uiI3 # 什么是 ...

  8. 牛逼哄哄的 Lambda 表达式,简洁优雅就是生产力!

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 作者:Sevenvidia https://www.zhihu.c ...

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

    强烈推荐!!! 作者:Sevenvidia 链接:https://www.zhihu.com/question/20125256/answer/324121308 来源:知乎 著作权归作者所有.商业转 ...

最新文章

  1. CodeGen编写自定义表达式标记
  2. OpenCV(二)逐像素的图像复制、图像边缘检测(自实现和API实现)
  3. Til the Cows Come Home (最短路问题, 模板)
  4. raise主动引发异常
  5. 关于SQL SERVER高并发解决方案
  6. java nio 阻塞_Java NIO和传统阻塞IO
  7. struts2配置文件的位置
  8. python测试用例管理模块_python-selenium并发执行测试用例(方法一 各模块每一条并发执行)...
  9. 任何性能指标越界或造成 APP 崩溃,优酷通用性能测试一招搞定
  10. 【SpringBoot_ANNOTATIONS】 总集篇
  11. 主成分分析之数学推导
  12. 利用DirectoryEntry获取域内计算机以及共享资源
  13. vue实现坐标拾取器功能demo
  14. 基于波动率的期权交易策略分析
  15. 计算机文化基础0008 17秋在线作业1,【在线】《计算机文化基础0008》17秋在线作业2.doc...
  16. 计算机三种校验方式,三种校验码
  17. Excel合并单元格怎么分组排序?
  18. 商务网站建设与维护【11】
  19. [乐意黎原创]访问Centos下Apache主机页面抛You don't have permission to access / on this server.
  20. confluence 删除_知识管理平台Confluence教程:如何删除或还原页面?

热门文章

  1. BUU--[MRCTF2020]PixelShooter
  2. buu 凯撒?替换?呵呵!
  3. CSS基本选择器(元素选择器、类选择器、id选择器)
  4. [architecture]-ARMV7架构下SecureMonitor双系统切换时保存和恢复哪些寄存
  5. 【攻防世界006】secret-galaxy-300
  6. 2020-11-7( servlet)
  7. OSX 使用“终端”远程登录linux主机
  8. MySQL唯一约束(UNIQUE KEY)
  9. 【Echarts 3.x】填坑记
  10. 【Prometheus 】 Blackbox_exporter 指标 probe_http_duration_seconds