day 20 匿名函数
1 匿名函数
1.1 def 用于定义有名函数
func=函数的内存地址
def func(x,y):
return x+y
print(func)
1.2 lamdab 用于定义匿名函数
print(lambda x, y : x+y)
1.3 调用匿名函数
-
方式一:
res=(lambda x,y:x+y)(1,2) print(res) -
方式二
func=lambda x,y:x+y res=func(1,2) print(res)
2 匿名函数应用
salaries={
'siry':3000,
'tom':7000,
'lili':10000,
'jack':2000
}
def func(k):
return salaries[k]
要想取得薪水的最大值和最小值,我们可以使用内置函数max和min(为了方便开发,python解释器已经为我们定义好了一系列常用的功能,称之为内置的函数,我们只需要拿来使用即可)
内置max和min都支持迭代器协议,工作原理都是迭代字典,取得是字典的键,因而比较的是键的最大和最小值,而我们想要的是比较值的最大值与最小值,于是做出如下改动
2.1 max 的应用:
函数max会迭代字典salaries,每取出一个“人名”就会当做参数传给指定的匿名函数,然后将匿名函数的返回值当做比较依据,最终返回薪资最高的那个人的名字
res=max(salaries,key=func) # 返回值=func('siry')
print(res)
---------------------------------------------------------
原理:
res=max(salaries,key=lambda k:salaries[k])
print(res)
2.2 min 的应用
res=min( salaries, key=lambda k: salaries[ k ] )
print(res)
2.3 sorted 排序
我们直接对字典进行排序,默认也是按照字典的键去排序的
salaries={
'siry':3000,
'tom':7000,
'lili':10000,
'jack':2000
}
res=sorted(salaries,key=lambda k:salaries[k], reverse=True)
print(res)
2.4 map 的应用
函数map、reduce、filter都支持迭代器协议,用来处理可迭代对象
map函数可以接收两个参数,一个是函数,另外一个是可迭代对象。map会依次迭代l,得到的值依次传给匿名函数(也可以是有名函数),而map函数得到的结果仍然是迭代器。
l=['alex','lxx','wxx','薛贤妻']
new_l=(name+'_dsb' for name in l)
print(new_l)
------------------------------------------
res=map(lambda name:name+'_dsb', l)
print(res) # 生成器
2.5 filter 的应用
lter函数会依次迭代l,得到的值依次传给匿名函数,如果匿名函数的返回值为真,则过滤出该元素,而filter函数得到的结果仍然是迭代器。
l=['alex_sb','lxx_sb','wxx','薛贤妻']
res=(name for name in l if name.endswith('sb'))
print(res)
------------------------------------------
res=filter(lambda name:name.endswith('sb'), l)
print(res)
2.6 reduce 的应用
reduce函数可以接收三个参数,一个是函数,第二个是可迭代对象,第三个是初始值
没有初始值,reduce函数会先迭代一次 l 得到的值作为初始值,作为第一个值数传给x,然后继续迭代一次 l 得到的值作为第二个值传给y
from functools import reduce
res=reduce(lambda x,y:x+y, [1,2,3], 10) # 16
print(res)
res=reduce(lambda x,y:x+y, ['a','b','c']) # 'a','b'
print(res)

浙公网安备 33010602011771号