1、lambda的应用场景
如果一个函数有一个返回值,并且只有一句代码,可以使用lambda简化。
2、lambda语法
lambda参数列表:表达式
注意
lambda表达式的参数可有可无,函数的参数在lambda表达式中完全适用。
lambda表达式能接收任何数量的参数但只能返回一个表达式的值。
3、快速入门
# 函数
deffn1():
return200
print(fn1)
print(fn1())
# lambda表达式
fn2= lambda: 100
print(fn2)
print(fn2())
注意
直接打印lambda表达式,输出的是此lambda的内存地址
4、示例:计算a + b
1.函数实现
defadd(a,b):
returna+b
result= add(1,2)
print(result)
思考:需求简单,是否代码多?
2.lambda实现
print((lambdaa,b: a+b)(1,2))
5、lambda的参数
1.无参数
print((lambda: 100))
2.一个参数
print((lambdaa: a)('hello word'))
3.默认参数
print((lambdaa,b,c=100: a+b+c)(10,20))
4.可变参数:**args
print((lambda*args: args)(10,20,30))
注意
这里的可变参数传入到lambda之后,返回值为元组。
5.可变参数:**kwargs
print((lambda**kwargs: kwargs)(name='python',age=20))
6、lambda的应用
1.带判断的lambda
print(lambdaa,b: aifa>belseb)(1000,500)
2.列表数据按字典key的值排序
students= [
{'name':'Tom','age':18},
{'name':'Rose','age':19},
{'name':'Jack','age':20}
]
# 按name值升序排列
students.sort(key=lambdax: x['name'])
print(students)
#按name值降序排列
students.sort(key=lambdax: x['name'],reverse=True)
print(students)
3.当lamdba与map函数一起使用
语法: map(函数名,可迭代对象) 可以对可迭代对象中的每一个元素进映射,分别取值。执行function
li= [11, 22, 33]
sl= [1, 2, 3]
new_list= map(lambdaa, b: a+b, li, sl)
print(list(new_list))
[12, 24, 36]
4.当lamdba与reduc函数一起使用的时候
语法:reduce(函数名,可迭代对象) # 这两个参数必须都要有,缺一个不行
fromfunctoolsimportreduce
l= [1,2,3,4]
l1= reduce(lambdax,y:x+y,l)
print(l1)
10
5.当lamdba与filter函数一起使用的时候
语法: filter(function,iterable) 他可以根据条件对数据进行过滤。function: 用来筛选的函数,在filter中会自动的把iterable中的元素传递给function,然后根据function返回的True或者False来判断是否保留此项数据
lst= [{'id': 1, 'name': 'alex', 'age': 18},
{'id': 1, 'name': 'wusir', 'age': 17},
{'id': 1, 'name': 'taibai', 'age': 16}, ]
ls= filter(lambdae: e['age'] >16, lst)
print(list(ls))
[{'id': 1, 'name': 'alex', 'age': 18}, {'id': 1, 'name': 'wusir', 'age': 17}]
6.当lamdba与zip函数一起使用的时候
函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元祖,然后返回由这些元祖组成的内容,如果各个迭代器的元素个数不一致,则按照长度最短的返回
lst1= [1,2,3]
lst2= ['a','b','c','d']
lst3= (11,12,13,14,15)
foriinzip(lst1,lst2,lst3):
print(i)
# 结果:
# (1, 'a', 11)
# (2, 'b', 12)
# (3, 'c', 13)
本人能力有限,如果文章有任何错误欢迎不吝赐教,其次如果大家有任何关于python的疑难杂问,也欢迎和大家一起交流讨论。
关于运维学习、分享、交流,笔者开通了微信公众号【运维猫】,感兴趣的朋友可以关注下,欢迎加入,建立属于我们自己的小圈子,一起学运维知识。
扫描二维码
获取更多精彩
运维猫公众号
有需要技术交流的小伙伴可以加我微信,期待与大家共同成长,本人微信:
扫描二维码
添加私人微信
运维猫博主
扫码加微信
最近有一些星友咨询我知识星球的事,我也想继续在星球上发布更优质的内容供大家学习和探讨。运维猫公众号平台致力于为大家提供免费的学习资源,知识星球主要致力于即将入坑或者已经入坑的运维行业的小伙伴。
点击阅读原文 查看更多精彩内容!!!