在这个互联网时代,大家都喜欢匿名,匿名上网,匿名登录,匿名操作等等,都不喜欢实名对吧?(虽然说现在实名制已经快到来,题外话,扯远了),当然python里也有个不喜欢实名的,它的功效优点特殊,说强大吧?它也有限制,说没什么用吧?它又能干很多事,它就是匿名函数
匿名函数:lambda
1.什么是匿名函数:
其实前面也提到一点点,就是不需要使用def 来定义函数,而是在用的时候直接定义,然后用完则完(不过你一个赋值给一个变量,下面有提到),在前面使用sorted函数为列表排序就使用过lambda了,自己倒回去看看或者看下面的6
2.作用:
- 使用lambda可以省下定义函数过程
- 不需要考虑命名的问题
- 简化代码的可读性
3.格式:
lambda args:expression
- args:以逗号分隔的参数列表
- expression:用到args中各个参数的表达式
例:
但是像这样是错的,注意了:
4.注意:
1):lambda其实就是一个表达式,没有名字,调用时赋值一个变量使用其变量名
2):lambda是一个单个的表达式,而不是一个代码块(比如for,while循环,if语句等就是一个代码块)
3):lambda语句定义的代码必须是合法的表达式,不能出现多条件语句(但可以使用if 的三元表达式)和其他非表达式语句(如for和while等)
4):lambda的首要用途是指定短小的回调函数
5):lambda将返回一个函数而不是将函数赋值给某变量
5.lambda和def的区别:
1):lambda会创建一个匿名的函数对象,但不会把这个函数对象赋给一个标识符,python lambda只是一个表达式。
2):def 创建函数,其函数时有名称的,会把函数对象赋值给一个变量,def是一个语句
3):def语句不能出现在列表内,比如:
但是lambda可以:
这里要注意,list1还是一个列表,list1[0]才是一个匿名函数
4):匿名函数只能有一个表达式,输出为表达式的结果,这是它的优点也是它的限制
6.lambda经典运用:
1):对集合a以元组第二个元素从小小大排序:
2):对集合a以元组第一个元素顺序从小到大排序:
3):对集合a以元组第一个元素从大到小排序:
lambda可以对元组进行排序,上面已经使用了,也可以对字典进行排序,方法同样的,此处略过,自己尝试了
7.匿名函数仅支持if的三元表达式:
8.匿名函数也支持列表解析(列表推导式):
既然支持列表推导式,那么也得遵循列表规则,这里使用索引5访问元素时,已经超出原有索引值
下一章将说到匿名函数进阶话题,虽然很简单,但是真的很实用