洗礼灵魂,修炼python(24)--自定义函数(5)—匿名函数lambda
2018-03-02 22:28
711 查看
在这个互联网时代,大家都喜欢匿名,匿名上网,匿名登录,匿名操作等等,都不喜欢实名对吧?(虽然说现在实名制已经快到来,题外话,扯远了),当然python里也有个不喜欢实名的,它的功效优点特殊,说强大吧?它也有限制,说没什么用吧?它又能干很多事,它就是匿名函数
不需要考虑命名的问题
简化代码的可读性
expression:用到args中各个参数的表达式
例:
![](http://images2017.cnblogs.com/blog/1249183/201710/1249183-20171011130908199-148763728.png)
但是像这样是错的,注意了:
![](http://images2017.cnblogs.com/blog/1249183/201710/1249183-20171011131020121-1378295310.png)
a2f4
返回一个函数而不是将函数赋值给某变量
![](http://images2017.cnblogs.com/blog/1249183/201710/1249183-20171011131839496-699565396.png)
但是lambda可以:
![](http://images2017.cnblogs.com/blog/1249183/201710/1249183-20171011132141418-167034946.png)
这里要注意,list1还是一个列表,list1[0]才是一个匿名函数4):匿名函数只能有一个表达式,输出为表达式的结果,这是它的优点也是它的限制
![](http://images2017.cnblogs.com/blog/1249183/201710/1249183-20171011131307074-668365034.png)
2):对集合a以元组第一个元素顺序从小到大排序:
![](http://images2017.cnblogs.com/blog/1249183/201710/1249183-20171011131424918-136468928.png)
3):对集合a以元组第一个元素从大到小排序:
![](http://images2017.cnblogs.com/blog/1249183/201710/1249183-20171011131603652-343937670.png)
lambda可以对元组进行排序,上面已经使用了,也可以对字典进行排序,方法同样的,此处略过,自己尝试了![](http://images2017.cnblogs.com/blog/1249183/201710/1249183-20171011132803590-142010601.png)
![](http://images2017.cnblogs.com/blog/1249183/201710/1249183-20171011133124574-1750370816.png)
既然支持列表推导式,那么也得遵循列表规则,这里使用索引5访问元素时,已经超出原有索引值下一章将说到匿名函数进阶话题,虽然很简单,但是真的很实用
匿名函数:lambda
1.什么是匿名函数:
其实前面也提到一点点,就是不需要使用def 来定义函数,而是在用的时候直接定义,然后用完则完(不过你一个赋值给一个变量,下面有提到),在前面使用sorted函数为列表排序就使用过lambda了,自己倒回去看看或者看下面的62.作用:
使用lambda可以省下定义函数过程不需要考虑命名的问题
简化代码的可读性
3.格式:
lambda args:expressionargs:以逗号分隔的参数列表expression:用到args中各个参数的表达式
例:
![](http://images2017.cnblogs.com/blog/1249183/201710/1249183-20171011130908199-148763728.png)
但是像这样是错的,注意了:
![](http://images2017.cnblogs.com/blog/1249183/201710/1249183-20171011131020121-1378295310.png)
4.注意:
1):lambda其实就是一个表达式,没有名字,调用时赋值一个变量使用其变量名2):lambda是一个单个的表达式,而不是一个代码块(比如for,while循环,if语句等就是一个代码块)3):lambda语句定义的代码必须是合法的表达式,不能出现多条件语句(但可以使用if 的三元表达式)和其他非表达式语句(如for和while等)4):lambda的首要用途是指定短小的回调函数5):lambda将a2f4
返回一个函数而不是将函数赋值给某变量
5.lambda和def的区别:
1):lambda会创建一个匿名的函数对象,但不会把这个函数对象赋给一个标识符,python lambda只是一个表达式。2):def 创建函数,其函数时有名称的,会把函数对象赋值给一个变量,def是一个语句3):def语句不能出现在列表内,比如:![](http://images2017.cnblogs.com/blog/1249183/201710/1249183-20171011131839496-699565396.png)
但是lambda可以:
![](http://images2017.cnblogs.com/blog/1249183/201710/1249183-20171011132141418-167034946.png)
这里要注意,list1还是一个列表,list1[0]才是一个匿名函数4):匿名函数只能有一个表达式,输出为表达式的结果,这是它的优点也是它的限制
6.lambda经典运用:
1):对集合a以元组第二个元素从小小大排序:![](http://images2017.cnblogs.com/blog/1249183/201710/1249183-20171011131307074-668365034.png)
2):对集合a以元组第一个元素顺序从小到大排序:
![](http://images2017.cnblogs.com/blog/1249183/201710/1249183-20171011131424918-136468928.png)
3):对集合a以元组第一个元素从大到小排序:
![](http://images2017.cnblogs.com/blog/1249183/201710/1249183-20171011131603652-343937670.png)
lambda可以对元组进行排序,上面已经使用了,也可以对字典进行排序,方法同样的,此处略过,自己尝试了
7.匿名函数仅支持if的三元表达式:
![](http://images2017.cnblogs.com/blog/1249183/201710/1249183-20171011132803590-142010601.png)
8.匿名函数也支持列表解析(列表推导式):
![](http://images2017.cnblogs.com/blog/1249183/201710/1249183-20171011133124574-1750370816.png)
既然支持列表推导式,那么也得遵循列表规则,这里使用索引5访问元素时,已经超出原有索引值下一章将说到匿名函数进阶话题,虽然很简单,但是真的很实用
相关文章推荐
- 洗礼灵魂,修炼python(25)--自定义函数(6)—从匿名函数进阶话题讲解中解析“函数式编程”
- 洗礼灵魂,修炼python(22)--自定义函数(3)—函数作用域,闭包
- 洗礼灵魂,修炼python(23)--自定义函数(4)—闭包进阶问题—>报错UnboundLocalError: local variable 'x' referenced before assign
- 洗礼灵魂,修炼python(20)--自定义函数(1)—基础概念
- 洗礼灵魂,修炼python(11)--python函数,模块
- 洗礼灵魂,修炼python(12)--python关键词,包
- python中的lambda匿名函数以及针对序列的内建函数map、filter和reduce
- 洗礼灵魂,修炼python(1)--python简介
- 洗礼灵魂,修炼python(7)--元组,集合,不可变集合
- 洗礼灵魂,修炼python(13)--模块random,math,pickle
- 洗礼灵魂,修炼python(32)--面向对象编程(2)—进一步认识类
- 洗礼灵魂,修炼python(14)--模块decimal, fractions,operator,collections以及精度介绍
- 洗礼灵魂,修炼python(33)--面向对象编程(3)—特殊类方法__init__,公有属性,私有属性
- Python 函数式编程(高阶函数、把函数作为参数、map()函数、reduce()函数、filter()函数、自定义排序函数、函数返回函数、闭包、匿名函数、装饰器decorator)
- 洗礼灵魂,修炼python(34)--面向对象编程(4)—继承
- python3学习笔记:函数作为返回值&匿名函数lambda
- python几个重要的函数(lambda,filter,reduce,map,zip) 一、匿名函数lambda lambda argument1,argument2,...argumentN :e
- 洗礼灵魂,修炼python(35)--面向对象编程(5)—多重继承,组合
- python 函数进阶:参数传递,高阶函数,lambda 匿名函数,global 变量,递归
- 洗礼灵魂,修炼python(15)--列表进阶话题—>列表解析/列表生成器