没有函数名的函数
对比有名函数:区别是有函数名,可以被重复多少次使用
特点:只能在定义的时候使用,且只能使用一次
2.为何要用匿名函数?(why)
(lambda x,y:x+y)()
#print(lambda x,y:x+y)得到的是一个函数的内存地址
#x,y是匿名函数的参数,x+y是函数的功能,()是调用这个函数
4.匿名函数和其他函数的配合使用(max min map reduce)
max
eg1.
salaries={
'egon':5000,
'alex':10000,
'aaa':20000
}
##取出工资最高的人的名字`
#有名函数
def func(k):
return salarier[k]
res=max(salaries,key=func)
#匿名函数
res=max(salaries,key=lambda name:salaries[name])
print(res)
max函数指定key后: 1.将可迭代的对象变成迭代器对象 2.迭代出来的值当作key后面的函数的参数传给key后面的函数 3.调用key=后面的函数,将返回值作为比较依据
eg2. nums=[10,-22,11,8] ##比较他们平方的大小
#有名函数
def func(k):
return k**2
print(max(nums,key=func))
#匿名函数
res=max(nums,key=lambda k:k**2)
print(res)
min
和max的作用原理类似
map
映射:相当于每个值执行一边map的规则,然后得到相同个数的值
names=['aaa','bbb','ccc']
##在每个人的名字后面加上’sb‘
#方式1:
new_names=[]
for name in names:
new_names.append(name+'sb')
print(new_names)
#方式二 :三元表达式
naw_names=[name+'sb' for name in names]
print(new_names)
#方式三:map映射
res=map(lambda x:x+'sb',names)
print(res)
reduce
减少
#方式一:手动实现
res=0
for i in range(1,101):
res+=i
print(res)
#方式二:三元表达式
res=sum(i for i in range(1,101))
print(res)
#方式三:reduce+匿名函数
from functools import deduce
res=reduce(lambda x,y:x+y,[i for i in range(1,101)])
print(res)
#reduce的工作原理:三个参数 #1.合并规则 #2.可迭代对象 #3.初始值(没有指定初始值是,默认是None)
filter
过滤
#方式一
new_names=[]
names=['aaa_sb','bbb_sb','ccc_sb','ddd']
for name in names:
if name.endwith('sb'):
new_names.append(name)
print(new_names)
#方式二:list生成式
names=['aaa_sb','bbb_sb','ccc_sb','ddd']
new_names=[name for name in names if name.endwith('sb')]
print(new_names)
#方式三:filter+匿名函数
res=filter(lambda name:name.endwith('sb'),names)
print(res)