4.3 lambda表达式
函数,封装的代码块可以很复杂,也可以很简单。当函数的代码块简单到只有一个表达式,就可以考虑用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表达式的更多相关文章
- 你知道C#中的Lambda表达式的演化过程吗?
那得从很久很久以前说起了,记得那个时候... 懵懂的记得从前有个叫委托的东西是那么的高深难懂. 委托的使用 例一: 什么是委托? 个人理解:用来传递方法的类型.(用来传递数字的类型有int.float ...
- Linq表达式、Lambda表达式你更喜欢哪个?
什么是Linq表达式?什么是Lambda表达式? 如图: 由此可见Linq表达式和Lambda表达式并没有什么可比性. 那与Lambda表达式相关的整条语句称作什么呢?在微软并没有给出官方的命名,在& ...
- 背后的故事之 - 快乐的Lambda表达式(一)
快乐的Lambda表达式(二) 自从Lambda随.NET Framework3.5出现在.NET开发者眼前以来,它已经给我们带来了太多的欣喜.它优雅,对开发者更友好,能提高开发效率,天啊!它还有可能 ...
- Kotlin的Lambda表达式以及它们怎样简化Android开发(KAD 07)
作者:Antonio Leiva 时间:Jan 5, 2017 原文链接:https://antonioleiva.com/lambdas-kotlin/ 由于Lambda表达式允许更简单的方式建模式 ...
- java8中lambda表达式的应用,以及一些泛型相关
语法部分就不写了,我们直接抛出一个实际问题,看看java8的这些新特性究竟能给我们带来哪些便利 顺带用到一些泛型编程,一切都是为了简化代码 场景: 一个数据类,用于记录职工信息 public clas ...
- 背后的故事之 - 快乐的Lambda表达式(二)
快乐的Lambda表达式 上一篇 背后的故事之 - 快乐的Lambda表达式(一)我们由浅入深的分析了一下Lambda表达式.知道了它和委托以及普通方法的区别,并且通过测试对比他们之间的性能,然后我们 ...
- CRL快速开发框架系列教程二(基于Lambda表达式查询)
本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...
- Lambda 表达式递归用法实例
注意: 使用Lambda表达式会增加额外开销,但却有时候又蛮方便的. Windows下查找子孙窗口实例: HWND FindDescendantWindows(HWND hWndParent, LPC ...
- Spark中Lambda表达式的变量作用域
通常,我们希望能够在lambda表达式的闭合方法或类中访问其他的变量,例如: package java8test; public class T1 { public static void main( ...
- 释放Android的函数式能量(I):Kotlin语言的Lambda表达式
原文标题:Unleash functional power on Android (I): Kotlin lambdas 原文链接:http://antonioleiva.com/operator-o ...
随机推荐
- linux如何自动获取ip地址
第一步:激活网卡 系统装好后默认的网卡是eth0,用下面的命令将这块网卡激活. # ifconfig eth0 up 第二步:设置网卡进入系统时启动 想要每次开机就可以自动获取IP地址上网,就要设置网 ...
- aliyun 购买的linux安装tomcat
按照网上的教程,下载tomcat,解压(即安装),启动,发现无法访问.有说端口未开放,修改/etc/sysconfig/iptables,添加端口开放.未发现有此文件,只有iptables-confg ...
- awk中引用shell变量执行替换的脚本
遇到问题: 现在有两个脚本,我想 将file1中的内容按file2来匹配 [root@154 home]# cat file1 3-1-1 POTV=1,POTA=0,POTP=2 1-4-76 PO ...
- 认识Webpack
认识Webpack 网上已经有不少Webpack教程入门教程了. 本文记录了我以我的方式方法.思路认识了解Webpack.从官方的Tutorial入手,不断提出问题.解决,一步一步认识Webpac ...
- ferror,perror,cleaner
1.ferror 函数原型: int ferror(FILE *fp) 功能:测试文件是否出现错误 返回值:未出错是0:出错为非0. 每次调用文件输入输出函数,均产生一个新的ferror函数值 fop ...
- JAVA泛型使用方法总结
1. 基本概念: (1)什么是泛型? 泛型,即"参数化类型".即将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用或 ...
- 深入理解Java内存模型之系列篇[转]
原文链接:http://blog.csdn.net/ccit0519/article/details/11241403 深入理解Java内存模型(一)——基础 并发编程模型的分类 在并发编程中,我们需 ...
- Spring整合JMS(三)——MessageConverter介绍
原文链接:http://haohaoxuexi.iteye.com/blog/1900937 1.4 消息转换器MessageConverter MessageConverter的作用主要有两 ...
- 构建企业级Nginx+Keepalived集群架构
随着Nginx在国内的发展潮流,越来越多的互联网公司都在使用Nginx. Nginx高性能.稳定性成为IT人士青睐的http和反向代理服务器,今天我们来实战构建Nginx+Keepalived高可用架 ...
- zabbix安装步骤
第一步:安装环境 Zabbix要求的环境 组件 版本要求 Apache版本 1 .3.1 2 MySQL版本 5.0.3 PHP版本 5.4.0 本次安装的环境 组件 版本要求 操作系统 CentOS ...