python内置函数sorted,map,filter,匿名函数lambda

本文围绕Python展开,介绍了匿名函数lambda,它无需显示定义函数名,简洁且有特定应用场景;还讲解了内置函数sorted、map和filter,sorted可对列表排序,map有映射作用,filter能过滤可迭代对象中满足条件的元素。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 匿名函数lambda
  2. sorted
  3. map
  4. filter

一,匿名函数lambda

什么是匿名函数?从定义上看,匿名函数简单来说就是没有名字的函数,在调用的时候不是通过函数名字来调用的。通过对函数的学习,当定义一个函数的时候,会是这样:

def function_name(parameters): .....

调用的时候用 function_name(参数),其实变量名function_name  = 函数体内存地址。

而对于匿名函数来说,匿名函数不需要显示地定义函数名,使用【lambda + 参数 +表达式】的方式。

假如下面我要写一个两个数相加的函数。

正常函数:

def func(x,y):

        return x + y

匿名函数:

lambda x,y:x+y

从上面的代码是可以看出,匿名函数更加简洁同时不失可读性。但是存在一个问题,该怎么调用匿名函数,没有函数名就不知道该函数的内存地址而不好调用?需要明确的是匿名函数也是函数,也就是说“lambda x,y:x+y ”这段代码其实也是在进行定义的。

ret = (lambda x,y:x+y)
print(ret)

 <function <lambda> at 0x0000026F42AA04A0>

从结果上看,ret 就是该函数体的内存地址。那么就可以 " ret(1,2)" 这样进行调用了,但是这样是可以进行调用,但是违背了匿名函数的宗旨:匿名。那么匿名函数的应用场景呢?

二,内置函数sorted 

了解内置函数的读者,可能知道这个函数可以为列表进行排序,下面我们仔细看看这个函数。

def sorted(

    __iterable: Iterable[_T@sorted],

    *,

    key: (_T@sorted) -> SupportsRichComparison,

    reverse: bool = False

sorted的参数为可迭代对象,进行比较时对比的关键字key,是否进行升序参数reverse。

dic = {'egon':10,'alxe':30,'zhu':66,'ming':15} 

对于这个字典,需求是想通过value值来对键进行排序。 

ret = sorted(dic,key = lambda x : dic[x],reverse = True)  # 参照value 的值对键进行排序
print(ret)

这样就完成了通过value值来对键进行排序了。

如果单纯的直接通过‘sorted(dic) ’ 的话会对键 按照字典进行排序。

ret = sorted(dic)
print(ret)

 ['alxe', 'egon', 'ming', 'zhu']

并没有实现通过value的值而对键进行的排序。

三,内置函数map 

map 函数是映射的作用。我们来看一下map函数

map(func, *iterables) --> map object

可以看到map 的两个参数:函数 和 可迭代对象

l = ['egon','alxe','zhu','ming'] 

对于这个列表,需求是为每一个元素后面加上" _666" 。

1,不通过map函数来实现这个功能,得到一个迭代器对象,每次可以通过迭代器得到值。

lit = (name+'_666' for name in l)

#下面展示实现的结果
print(lit)  # <generator object <genexpr> at 0x000001CF56A49630> 是一个迭代器

lit.__iter__()
ret = lit.__next__()

print(ret) # egon_666

 2,利用map函数来实现

ret = map(lambda name:name+'_666',l)# map(func, *iterables) --> map object 得到一个迭代器对象
name = ret.__next__()
print(name)

egon_666 

ret是一个迭代器,通过for循环来取值的话可以都取出来查看值,这里就不展示了。

四,内置函数filter

内置函数filter的作用是过滤,通过参数function来完成对可迭代对象中满足function的对象。

filter(function or None, iterable) --> filter object

需求,对下面的列表中的元素,以6为结尾的元素过滤出来。

l = ['egon_dsb','alxe_6',"zhuzhu_666",'hello_6'] 

 1,不利用filter方法

ret = [name for name in l if name.endswith('6')]
print(ret) # ['alxe_6', 'zhuzhu_666', 'hello_6']

ret = [name for name in l if name.endswith('_6')]
print(ret) # ['alxe_6', 'hello_6']

2,通过filter方法

ret = filter(lambda name:name.endswith('_6'),l)
print(ret)  # <filter object at 0x000001D6FD74AD10>  返回的是一个迭代器对象

res = ret.__next__()
print(res) # alxe_6
res = next(ret)
print(res) # hello_6
res = next(ret)
print(res)  # StopIteration

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

遇见陌生人了

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值