一、匿名函数的介绍和使用
在Python中,不通过def来声明函数名字,而是通过lambda关键字来定义的函数称为匿名函数
1.需要将一个函数对象作为参数来传递时,可以直接定义一个lambda函数(作为函数的参数或返回值)
2.要处理的业务符合lambda函数的情况(任意多个参数和一个返回值),并且只有一个地方会使用这个函数,不会在其他地方重用,可以使用lambda函数
二、常规函数和匿名函数的对比
# 常规的语法
def add(a, b):return a + bres = add(11, 22)
print(res)# 匿名函数的语法 :lambda 参数: 返回值
# 适用于函数结构体非常简单的函数定义
add2 = lambda a, b: a + b
res2 = add2(33, 44)
print(res2)
运行结果:
33
77
三、匿名函数的多种表达形式:
# 无参数
lambda1 = lambda: 60
print(lambda1())# 一个参数
lambda2 = lambda num: num * 100
print(lambda2(5))# 多个参数
lambda3 = lambda a, b, c, d: a + b + c + d
print(lambda3(2, 4, 6, 8))# 表达式分支
lambda4 = lambda x: x if x % 2 == 0 else x + 6
print(lambda4(6))
print(lambda4(7))
运行结果
60
500
20
6
13
四、lambda可以作为一个参数传递
# python作为一个参数传递
def sub_func(a, b, func):print( func(a, b))sub_func(168, 178, lambda a, b: a + b)
运行结果
346
五、可以与python内置函数使用
li1 = [[11, 2], [1, 21], [93, 7], [87, 0], [23, 6]]
li1.sort(key=lambda x: x[0])
print(li1)li1.sort(key=lambda x: x[1])
print(li1)li = [{"name": "musen", 'age': 18, 'height': 155},{"name": "musen", 'age': 17, 'height': 178},{"name": "musen", 'age': 30, 'height': 175},{"name": "musen", 'age': 50, 'height': 185},
]
# 根据列表中每个数据的age值大小进行排序
li.sort(key=lambda x: x['age'])
print(li)
lista = [23, 43, 68, 32, 46, 58]
res = list(map(lambda x: {str(x): x}, lista))
print(res)
运行结果
[[1, 21], [11, 2], [23, 6], [87, 0], [93, 7]]
[[87, 0], [11, 2], [23, 6], [93, 7], [1, 21]]
[{'name': 'musen', 'age': 17, 'height': 178}, {'name': 'musen', 'age': 18, 'height': 155}, {'name': 'musen', 'age': 30, 'height': 175}, {'name': 'musen', 'age': 50, 'height': 185}]
[{'23': 23}, {'43': 43}, {'68': 68}, {'32': 32}, {'46': 46}, {'58': 58}]
六、lambda作为函数的返回值
def run_func(a, b):return lambda c: a - b - c
return_func = run_func(100, 20)
print(return_func)
print(return_func(10))
其中的a,b两个参数是run_func中的参数,但我们执行返回的函数return_func时,已经不在run_func的作用域内了,而lambda函数仍然能使用a,b参数。说明lambda函数会将它的运行环境保存一份,一直保留到它自己执行的时候使用。
运行结果:
<function run_func.<locals>.<lambda> at 0x000002B8D975F940>
70