lambda的应用场景主要简化函数代码
def func(a,b):
return a+b
a = func(1,2)
print(a)
结果为: 3
改写成lambda代码为:
func = lambda a,b: a+b
print(func)
print(func(1,2))
结果为:
at 0x00000217F98EA9D8>
3
此时可以得出结论:前边写需要传入的参数,冒号后面写返回值。如果直接打印func得到的只有内存地址,所以应该像函数一样进行打印,lambda很好的简化了代码
也可以写为
print((lambda a,b: a+b)(1,2))
继续看例子:
func = lambda a,b,c=3: a+b+c
print(func(1,2))
print(func(1,2,6))
print(func(1,2,c=6))
结果为:
6
9
9
此时可以得出结论:c的值可以替换
当然了lambda也可以使用*args和**kwargs看例子
func = lambda *args: args
func1 = lambda **kwargs: kwargs
print(func(1,2,3))
print(func1(name="li"))
结果为
(1,2,3)
{'name': 'li'}
得出的结论为:*args得出的结果为一个元组,而**kwargs会得到一个字典
看例子:
func = lambda a, b: a if a > b else b
print(func(1, 2))
结果为:2
可以得出结论:如果a>b则返回a,a
接下来看一个lambda如何进行字典的排序:
students = [
{'name': 'TOM', 'age': 20},
{'name': 'ROSE', 'age': 19},
{'name': 'Jack', 'age': 22} ]
students.sort(key=lambda a:a['age'])
print(students)
结果为:
[{'name': 'ROSE', 'age': 19}, {'name': 'TOM', 'age': 20}, {'name': 'Jack', 'age': 22}]
可以得出结论:此时要注意形参a指的是字典students
还有一种使用方法是结合python内置函数reduce使用
from functools import reduce
list1 = ['a','b','c']
list2 = [1,2,3,4]
res1 = reduce(lambda x,y : x + y, list1)
res2 = reduce(lambda x,y : x + y, list2)
res3 = reduce(lambda x,y : x * y, list2)
print(res1)
print(res2)
print(res3)
结果为:
abc
10
24
列表中的值将会按照lambda中的预订运算方法进行计算
当然了,reduce函数还可以进行设置初始值
from functools import reduce
list1 = ['a','b','c']
list2 = [1,2,3,4]
res1 = reduce(lambda x,y : x + y, list1, 'd')
res2 = reduce(lambda x,y : x + y, list2, 3)
res3 = reduce(lambda x,y : x * y, list2, 3)
print(res1)
print(res2)
print(res3)
结果为:
dabc
13
72