洗礼灵魂,修炼python(24)--自定义函数(5)—匿名函数lambda

时间:2023-12-22 12:09:38

在这个互联网时代,大家都喜欢匿名,匿名上网,匿名登录,匿名操作等等,都不喜欢实名对吧?(虽然说现在实名制已经快到来,题外话,扯远了),当然python里也有个不喜欢实名的,它的功效优点特殊,说强大吧?它也有限制,说没什么用吧?它又能干很多事,它就是匿名函数

匿名函数:lambda

1.什么是匿名函数:

其实前面也提到一点点,就是不需要使用def 来定义函数,而是在用的时候直接定义,然后用完则完(不过你一个赋值给一个变量,下面有提到),在前面使用sorted函数为列表排序就使用过lambda了,自己倒回去看看或者看下面的6

2.作用:

  • 使用lambda可以省下定义函数过程
  • 不需要考虑命名的问题
  • 简化代码的可读性

3.格式:

lambda args:expression

  • args:以逗号分隔的参数列表
  • expression:用到args中各个参数的表达式

例:

洗礼灵魂,修炼python(24)--自定义函数(5)—匿名函数lambda

但是像这样是错的,注意了:

洗礼灵魂,修炼python(24)--自定义函数(5)—匿名函数lambda

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语句不能出现在列表内,比如:

洗礼灵魂,修炼python(24)--自定义函数(5)—匿名函数lambda

但是lambda可以:

洗礼灵魂,修炼python(24)--自定义函数(5)—匿名函数lambda

这里要注意,list1还是一个列表,list1[0]才是一个匿名函数

4):匿名函数只能有一个表达式,输出为表达式的结果,这是它的优点也是它的限制

6.lambda经典运用:

1):对集合a以元组第二个元素从小小大排序:

洗礼灵魂,修炼python(24)--自定义函数(5)—匿名函数lambda

2):对集合a以元组第一个元素顺序从小到大排序:

洗礼灵魂,修炼python(24)--自定义函数(5)—匿名函数lambda

3):对集合a以元组第一个元素从大到小排序:

洗礼灵魂,修炼python(24)--自定义函数(5)—匿名函数lambda

lambda可以对元组进行排序,上面已经使用了,也可以对字典进行排序,方法同样的,此处略过,自己尝试了

7.匿名函数仅支持if的三元表达式:

洗礼灵魂,修炼python(24)--自定义函数(5)—匿名函数lambda

8.匿名函数也支持列表解析(列表推导式):

洗礼灵魂,修炼python(24)--自定义函数(5)—匿名函数lambda

既然支持列表推导式,那么也得遵循列表规则,这里使用索引5访问元素时,已经超出原有索引值

下一章将说到匿名函数进阶话题,虽然很简单,但是真的很实用