Loading

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)
posted @ 2021-12-04 23:50  maju  阅读(29)  评论(0)    收藏  举报