python中lambda表达式应用

 

自己在使用lambda函数的时候把自己整的头大。特别是当lambda和内置函数用的时候。自己都想打人,哈哈,也不会真打了。现在总结下自己在遇到lambda和内置函数结合使用的情况。

目录

lambda

map函数

reduc

filter

sorted

zip()


 

lamdba

lamdba 在python是匿名函数,匿名函数是匿名的吗?可以有名字,匿数可吗?以实现简单的函数的功能,如果太复杂,个人不建议使用lambda,因为这样写的太负载,代码的可读行不好。

lamdba函数的表达式:

函数名 = lambda 参数:返回值

注意:匿名函数的参数可以有多个。

我们用匿名函数来写一个函数
 

func = lambda x:x

print(func(10))

10

我们会发现实际匿名函数是有名字的,上面构建的匿名函数的ming名字是func

匿名函数的调用可普通的函数的调用方式是没有区别的,都是函数名加(),通过以下的例子说明:

def func1(a):
    return a
print(func1(1))
1
func = lambda x:x
print(func(1))
1

多个参数的匿名函数:

func = lambda x,y:x+y
print(func(1,2))
3

以上是简单的匿名函数的使用,哈哈,看到这里,是不是,感觉挺简单的。匿名函数也不过如此。

可是当匿名函数可一些内部函数结合使用的时候,就让人头疼了。

来说下他的小伙伴吧!!!

map函数

当lamdba可map函数一起使用的时候:

映射函数

语法: map(函数名,可迭代对象) 可以对可迭代对象中的每一个元素进映射,分别取执行function

li = [11, 22, 33]
new_list = map(lambda a: a + 100, li)
print(list(new_list))
[111, 122, 133]

当然,map还可以完成多个数组的相加

li = [11, 22, 33]
sl = [1, 2, 3]
new_list = map(lambda a, b: a + b, li, sl)
print (list(new_list))
[12, 24, 36]

reduc

语法:reduce(函数名,可迭代对象) # 这两个参数必须都要有,缺一个不行

from functools import reduce
l = [1,2,3,4]
l1 = reduce(lambda x,y:x+y,l)
print(l1)
10

看到结果是不是感到可神气呢?

reduce的作用是先把列表中的前俩个元素取出计算出一个值然后临时保存着, 接下来用这个临时保存的值和列表中第三个元素进行计算,求出一个新的值将最开始 临时保存的值覆盖掉,然后在用这个新的临时值和列表中第四个元素计算.依次类推 注意:我们放进去的可迭代对象没有更改 以上这个例子我们使用sum就可以完全的实现了.我现在有[1,2,3,4]想让列表中的数变成1234,就要用到reduce了. 普通函数版

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(lambda e: e['age'] > 16, lst)
print(list(ls))
[{'id': 1, 'name': 'alex', 'age': 18}, {'id': 1, 'name': 'wusir', 'age': 17}]

sorted

语法:sorted(iterable,key=None,reverse=False)

key: 排序规则(排序函数),在sorted内部会将可迭代对象中的每一个元素传递给这个函数的参数.根据函数运算的结果进行排序

reverse :是否是倒叙,True 倒叙 False 正序

lst = ['天龙八部', '西游记', '红楼梦', '三国演义']
#将lst中的值按照长度排序
print(sorted(lst, key=lambda s: len(s)))
# ['西游记', '红楼梦', '天龙八部', '三国演义']

还有一个内置函数,不和lamdba一起使用,但有时我对他挺迷的,就写在这里吧

zip()

函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元祖,

然后返回由这些元祖组成的内容,如果各个迭代器的元素个数不一致,则按照长度最短的返回

lst1 = [1,2,3]
lst2 = ['a','b','c','d']
lst3 = (11,12,13,14,15)
for i in zip(lst1,lst2,lst3):
    print(i)
# 结果:
# (1, 'a', 11)
# (2, 'b', 12)
# (3, 'c', 13)

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值