一、匿名函数介绍

在Python中,不通过def来声明函数名字,而是通过lambda关键字来定义的函数称为匿名函数。

二、匿名函数的特点

  • lambda函数不能声明函数名
  • 普通函数的声明:
def 函数名():
    函数体
  • lambda函数的声明:
lambda 参数:表达式
  • lambda函数能接收任何数量(包括0)的参数,结果返回的是一个lambda函数对象。
#没有参数
>>>print(lambda :2+5)
#执行结果:
>>><function <lambda> at 0x000001A89755A558>
#有参数
>>>print(lambda a,b: a+b)
>>><function <lambda> at 0x000002137EE7AB88>
  • lambda函数是一个函数对象,直接赋值给一个变量,这个变量就成了一个函数对象。
>>>result = lambda :2+5
>>>print(result)
#执行结果:
>>><function <lambda> at 0x0000014A0464AB88>

三、语法介绍

【语法】:lambda 参数:表达式

  • 先写lambda关键字,有些参数名(若是参数可以忽略不写)
  • 多个参数用逗号隔开
  • 在参数后面冒号后则写返回的表达式
def demo(y):
    result = lambda x: x+1
    return result(y)
print(demo(2))
执行结果:
3

四、实例演示

  • 匿名函数与普通函数的对比
def add_demo(a, b):
    return a+b


add_lam = lambda a,b: a+b


print(add_demo(1,2))
print(add_lam(1,2))


运行结果:
3
3
  • 匿名函数的多种形式
# 参数个数为0
lambda_0 = lambda: 1 + 2


# 参数个数为2
lambda_2 = lambda a, b: a + b


print(lambda_0())
print(lambda_2(1, 2))


运行结果:
3
3

可以看到,lambda的参数可以0个到多个,但是最后的值只有一个。

  • lambda作为一个参数传递
def sub_func(a, b, func):
    print('a =', a)
    print('b =', b)
    print('a - b =', func(a, b))




sub_func(100, 1, lambda a, b: a - b)
运行结果:


a = 100
b = 1
a - b = 99

上面的代码中,sub_func中需要传入一个函数,然后这个函数在sub_func里面执行,这时候我们就可以使用lambda函数,因为lambda就是一个函数对象。

  • lambda函数与Python内置函数配合使用
peoples = [
    {"name": "张三", "age": 100},
    {"name": "王五", "age": 89},
    {"name": "李四", "age": 120}
]
new_peoples = sorted(peoples, key=lambda x: x["age"])


num_sum = reduce(lambda x, y: x + y, range(1, 101))


print(new_peoples)
print(num_sum)


执行结果:
[{'name': '王五', 'age': 89}, {'name': '张三', 'age': 100}, {'name': '李四', 'age': 120}]
5050
  • lambda作为函数的返回值
def demo(a,b):
    return lambda d: (a*b*d)
print(demo(1,2)(3))
执行结果:
6

正文结束!