函数,封装的代码块可以很复杂,也可以很简单。当函数的代码块简单到只有一个表达式,就可以考虑用lambda表达式,也称匿名函数。

1 lambda表达式基础

 #首先需要声明一点:lambda是表达式而非语句
 #因为语句是为了声明一个逻辑,而表达式是为了计算或者返回值的。
 #lambd : print('hello,world')
 #上边就是一个lambda表达式,
 #但只有对象,没有名称,没有办法引用,
 #那就定义个变量指向lambda表达式对象
 a = lambda : print('hello,world')
 a()  #hello,world

 print(type(a))  # <class 'function'>  lambda表达式是函数,鉴定完毕

 #还是想再次声明一下,lambda表达式中写不了复杂的代码块,复杂的逻辑应该封装在def声明的函数中

 #lambda中的冒号就是函数头和函数体的分隔
 action = lambda a,b : a + b
 

2 lambda表达式应用

 #应用一:函数嵌套
 #需求:定义一个函数,计算一个数的平方值和立方值之和
 def my_fun(x):
     f1 = lambda x:x**2
     f2 = lambda x:x**3

     return f1(x) + f2(x)

 print(my_fun(2))

 #应用二:lambda对象作为列表、元组、字典等的元素
 a,b = 1,2
 fun_list = {lambda x,y:x+y,lambda x,y:x-y,lambda x,y:x*y,lambda x,y:x/y}

 for c in fun_list:
     if b != 0:
         print(c(a,b))
     else:
         print('分母不能为0哦')

 #-1
 #0.5

 #但这有一个问题,我自己定义的lambda列表,我知道每个lambda的功能,
 #但不方便别人理解代码,感觉字典表就好多了,键的命名可以体现一些lambda的功能
 #用键来引用对应的lambda就方便多了

 fun_dic = {
     '1cf':lambda x:x,
     '2cf':lambda x:x**2,
     '3cf':lambda x:x**3,
     '4cf':lambda x:x**4
 }

 for i in fun_dic.keys():
     print(fun_dic[i](b))

 #然后我执行获得一个数字的4次方值
 print(fun_dic['4cf'](5))

3 lambda表达式还可以作为回调函数处理句柄

 #回调函数,就是一个函数作为另一个函数的参数

 def fun1(a,b,fun):
     return fun(a,b)

 a = fun1(1,2,lambda x,y:x*y)
 print(a)

 #有没有感觉python中的对象就像一条傻狗,谁牵跟谁走
 #只要有一个变量指向这个对象,就可以通过这个变量来引用这个对象
 #而且,这个变量引用完这个对象,还可以引用其他对象
 a = 1
 a = 2

 print(a)  

4.3 lambda表达式的更多相关文章

  1. 你知道C#中的Lambda表达式的演化过程吗?

    那得从很久很久以前说起了,记得那个时候... 懵懂的记得从前有个叫委托的东西是那么的高深难懂. 委托的使用 例一: 什么是委托? 个人理解:用来传递方法的类型.(用来传递数字的类型有int.float ...

  2. Linq表达式、Lambda表达式你更喜欢哪个?

    什么是Linq表达式?什么是Lambda表达式? 如图: 由此可见Linq表达式和Lambda表达式并没有什么可比性. 那与Lambda表达式相关的整条语句称作什么呢?在微软并没有给出官方的命名,在& ...

  3. 背后的故事之 - 快乐的Lambda表达式(一)

    快乐的Lambda表达式(二) 自从Lambda随.NET Framework3.5出现在.NET开发者眼前以来,它已经给我们带来了太多的欣喜.它优雅,对开发者更友好,能提高开发效率,天啊!它还有可能 ...

  4. Kotlin的Lambda表达式以及它们怎样简化Android开发(KAD 07)

    作者:Antonio Leiva 时间:Jan 5, 2017 原文链接:https://antonioleiva.com/lambdas-kotlin/ 由于Lambda表达式允许更简单的方式建模式 ...

  5. java8中lambda表达式的应用,以及一些泛型相关

    语法部分就不写了,我们直接抛出一个实际问题,看看java8的这些新特性究竟能给我们带来哪些便利 顺带用到一些泛型编程,一切都是为了简化代码 场景: 一个数据类,用于记录职工信息 public clas ...

  6. 背后的故事之 - 快乐的Lambda表达式(二)

    快乐的Lambda表达式 上一篇 背后的故事之 - 快乐的Lambda表达式(一)我们由浅入深的分析了一下Lambda表达式.知道了它和委托以及普通方法的区别,并且通过测试对比他们之间的性能,然后我们 ...

  7. CRL快速开发框架系列教程二(基于Lambda表达式查询)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  8. Lambda 表达式递归用法实例

    注意: 使用Lambda表达式会增加额外开销,但却有时候又蛮方便的. Windows下查找子孙窗口实例: HWND FindDescendantWindows(HWND hWndParent, LPC ...

  9. Spark中Lambda表达式的变量作用域

    通常,我们希望能够在lambda表达式的闭合方法或类中访问其他的变量,例如: package java8test; public class T1 { public static void main( ...

  10. 释放Android的函数式能量(I):Kotlin语言的Lambda表达式

    原文标题:Unleash functional power on Android (I): Kotlin lambdas 原文链接:http://antonioleiva.com/operator-o ...

随机推荐

  1. 两个arduino的通信

    两个arduino板进行串口通讯实验 (-- ::)转载▼ 标签: 杂谈 购得两块arduino板子,想试试其通讯能力,于是写下如是程序,居然没有打麻烦,奇怪! 接线:两个板子各用电池供电,将两块板子 ...

  2. Tomcat 的设计模式分析

    最近在研究tomcat,手上有一份尚硅谷的tomcat设计模式的资料,翻开看了看个人觉得写得还是很好的.设计模式一般都是在有一定的代理积累之后才能用到的相关的这种解决方案.常用的一共有23种设计模式, ...

  3. linkin大话面向对象--闭包和回调

      先来理解2个概念:闭包和回调   什么是闭包? 闭包是一个可调用的对象,它记录了一些信息,这些信息来自于创建他的作用域.通过这个定义,可以看出内部类是面向对象的闭包,因为他不仅包含了外部类对象的信 ...

  4. PHP获取字符串编码与转码

    (⊙o⊙)-编辑器保存的是utf8的文档取出来的字符串是gbk编码?问题很多,字符串转换为utf8的话在浏览器输出乱码 $e=mb_detect_encoding($d,array('GB2312', ...

  5. lua版本的一个状态机

    这个状态机http://www.cnblogs.com/flytrace/p/5587033.html的lua版本 -- LUA 有实现枚举值的好办法么 local sc_enum = { -- ev ...

  6. 浅谈python lambda

    lambda x: x * x,实际上就是 def f(x): retrun x * x 关键字lambda表示匿名函数,冒号前的x表示函数参数. 匿名函数只能有一个表达式,不用写return,返回值 ...

  7. ABP框架源码学习之修改默认数据库表前缀或表名称

    ABP框架源码学习之修改默认数据库表前缀或表名称 1,源码 namespace Abp.Zero.EntityFramework { /// <summary> /// Extension ...

  8. Call to undefined function mysql_connect()错误原因

    从PHP5.0开始就不推荐使用mysql_connect()函数,到了php7.0则直接废弃了该函数,替代的函数是: mysqli_connect();

  9. c#写的热键注册程序

    玩网页游戏挂机,又不想让别人看见你电脑的运行.所以写了个后台运行的程序. 先谁HotKey注册类,用来调用com组件来显示与隐藏窗体: using System; using System.Colle ...

  10. cmake编译安装mysql 5.6.12

    cmake安装mysql 5.6.12 从mysql 5.5 开始就要用cmake编译安装 下载mysql 下载地址:http://pan.baidu.com/s/1o68xxqE 一.安装mysql ...