设为首页 收藏本站
查看: 841|回复: 0

[经验分享] Python的lambda表达式

[复制链接]

尚未签到

发表于 2018-1-22 11:23:54 | 显示全部楼层 |阅读模式
匿名表达式---lambda
介绍匿名函数- 也是就lambda表达式。
介绍几个 序列处理的函数,比如序列过滤、把所有元素都拿过来做某些操作,这种的序列处理函数。
这样的函数都有一些特点,会借用别函数来进行操作。这里就会用到lambda

▷匿名函数
lambda 函数是一种快速定义单行的最小函数,是从Lisp借用来的,可以用在任何需要函数的地方。
lambda 是一个 匿名函数,不需要名字的函数,它更像一像是一个指令,通常只需要一行代码去做一件事情的函数,都可以用lambda定义它。
不需要函数名字,只需要函数功能的,就会用到它。

特点
◆使用Python写一些执行脚本时,使用lambda可以省去定
义函数的过程,让代码更加精筒。
◆对于一些抽象的,不会别在的地方再复用的函数,有时
候给函数起个名字也是个难题,使用lambda不需要考虑
命名的问题。只用到一次,执行一次函数效果的函数,可以选择简洁一点的lambda
◆使用lambda在某些时候让代码更容易理解。

lambda应用实例
◆reduce为逐次操作list里的每项,接收的参数为2个,最后
返回的为一个结果
◆>>>defmyadd(x,y):
◆>>>
returnx+y
◆>>>sum =reducc(myadd,(1,2,3))
◆>>>6

工作原理
watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=.jpg
reduc (借助函数操作,序列(1,2,3,4,5))
reduc用来传值
myadd可以是 任意一个函数,这个函数一定能接受两个值
reduce每次会传递给两个值,

演示 reduce
watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=.jpg
注意在py2当中,reduce是直接可以拿来用的,py3当中使用会提示 没有定义、
原因是 在 py3当中 把reduce,放到了一个函数工具库的地方一个模块,(func tools );

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=.jpg
调函数工具库 代码
1
from functools import reduce




从么 地方 取过来 什么函数,导入 reduce;
中文翻译  help(reduce)
有助于减少_functools内置功能模块:
减少(…)
减少(函数,序列[初始值])>值
采用两参数累积到一序列的项的功能,
从左到右,以便将序列减少到单个值。
例如,减少(λx,y x,y,[ 1, 2, 3,4, 5 ])计算
(((1 + 2)+ 3)+ 4)+ 5)。如果初始存在,则将其放在项目之前。
在计算中的序列中,当
序列为空。

reduce例子
watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=.jpg
运行 代码
1
2
3
def c(x,y):
    return x+y
reduce(c,[1,2,3,4,5])



表达含义
定义 函数 c 需要 用到两个值(x,y):
返回两个值相加的结果 return x+y
reduce需要函数才能使用
reduce(c,[1,2,3,4,5,]) 内置函数调用函数 使用
现在这个案例里面的,里面定义的函数c ,仅仅是为了 reduce服务的。
只会用到一次,所以像这样代码 在程序当中就没有必要让它出现。
可以选择  用 lambda 表达式,来定义它

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=.jpg
lambda 表达式 可以 没有 名字,
直接后面 就是 函数的参数,
有几个 写几个 参数 x,y : 后面 是返回 进行的操作;
返回的是一个对象,可以给它定义一个名字
cc = lambda 表达式 x,y:x+y
用法: lambda 定义了要两个值,就要给它两个值。
cc(2004,14)
表达式运行 两个值相加,
所以当 像 reduce 需要用到这种函数的时候,不用去单独为了它 定义一个函数,可以直接把lambda表达式 写进去。
watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=.jpg

lambda 表达式
watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=.jpg
运行代码
reduce(lambda x,y:x+y,[1,2,3,4,5])
表达含义
reduce 直接 (lambda x,y:x+y ,[1,2,3,4,5]后面是序列,可以任何方式得到它)
所以这种情况下,不需要去为了我这个函数能够工作,去单独定义一个函数放过来,可以直接用lambda表达式写到这就可以。
除了 reduce之外还有 类似的 列表处理函数,
都是需要 借助一个函数 来工作的。

序列处理函数
◆filter()
fiter 过滤的,依次列表取值,符合就返回出来
◆map
如果你要对列表每一个元素 进行 遍历,进行操作的话,用map,map也是依次取值,得到值 进行定义的运算,返回每一个值 运算的结果。
◆reducel
reduce为逐次操作list里的每项,接收的参数为2个,最后
返回的为一个结果

符合使用 条件的都可以使用,lambda表达式;
虽然看起来很整洁,可以不用单独运行一个东西,去定义一个函数。注意 这样代码,能不能一下能读懂,如果你读起来更加费力了,这不是python追求的结果,不是什么都用 lambda表达式,也可以用列表 表达式,
他们都是对 一个序列进行操作;

列表表达式写法
lambda->列表表达式
◆map的例子,可以写成:
◆print [x * 2 + 10 for x in foo]
print ([x * 2 + 10 for x in foo])
python3中,去除了print语句,加入print()函数实现相同的功能。


◆filter的例子可以写成:
◆print[x for x in foo if x%3 == 0]
print([x for x in foo if x%3 == 0])
py3用法


所以这种东西,是根据你的实际需要,来选择用哪一个更合适,没有更合适
大多数情况下根据你的习惯、或者喜好来用。
率先使用 效率比较高的。


本章获取知识点
1.认识了 lambda表达式 语法
2.以及什么时候用
运用到这种只被执行一次函数的时候,可以定义一个lambda,摆在一个关键的位置就可以了。


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-435983-1-1.html 上篇帖子: Python中的运算符、数据类型、字符串及列表操作举例 下篇帖子: Python数据类型
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表