Python系列教程(二十五):匿名函数lambda

  一、匿名函数  

1、什么是匿名函数

    匿名函数就是没有名称的函数,前面我们学习函数定义的时候,是通过关键字‘def’后面加上函数名称来定义一个新函数的,而匿名函数不需要名称,所以不是通过关键字‘def’来定义了。

    匿名函数也一个函数,本质上也是一个函数对象,也需要定义,也需要调用,也有返回值。

2、为什么需要匿名函数

    ① 高阶函数传参时:有的时候,我们不需要关心函数的名称,比如前面学习的sorted()函数,其中有一个key参数可以传递一个函数,这里就可以直接使用匿名函数。

    ② 解决函数名冲突:匿名函数不用担心函数名称冲突的问题

    ③ 简化代码:python的匿名函数是一个单行表达式

3、python匿名函数的格式

  匿名函数格式:lambda 参数列表:表达式  

    说明:

    ① 使用关键字‘lambda’定义一个匿名函数

    ② 参数列表跟普通函数的参数列表一样,这里不需要小括号

    ③ 参数列表和表达式之间用‘:’隔开

    ④ 表达式不需要使用return,表达式的值就是匿名函数的返回值

    ⑤ 匿名函数只能有一个表达式,所以也叫单行函数

4、匿名函数的示例

lambda x, *, y=30: x + y

lambda *args: [x+1 for x in args]

lambda x: '.'.join([str(x / (256 ** i) % 256) for i in range(3, -1, -1)])

5、匿名函数的调用

    匿名函数和普通的函数都是函数对象,他们的区别就是一个有函数名称,一个没有函数名称,普通函数可以通过函数名称来调用到放在内存当中的函数对象,那匿名函数可以通过什么方式来调用呢?

  方法1:直接调用  

>>>(lambda x, *, y=30: x + y)(5)
35

  方法2:通过赋值给一个变量来调用  

    如果把匿名函数赋给一个变量,就可以通过这个变量名称来调用这个函数对象了,相当于给匿名函数起了一个名称,这就跟普通函数一样了,所以这种用法比较少,如果需要函数名称的,为什么不干脆用def定义呢。

>>>a = lambda x, *, y=30: x + y
>>>a(5)
35

  方法3:通过高阶函数传参的方式 

    高阶函数后面会学到,就是传的参数也需要一个函数,这个时候就可以直接在传参的时候定义一个匿名函数,因为这个函数只是在传参的时候用到,后面不需要用到,就没有必要浪费一个函数名称。

>>>list(filter(lambda x:x>3,range(1,10)))
[4, 5, 6, 7, 8, 9]
Jimmy's Blog ,版权所有丨如未注明,均为原创丨本网站采用BY-NC-SA协议进行授权,转载请注明转自:https://www.xjimmy.com/python-25-lambda.html

Leave a Comment