1.什么是匿名函数
def定义的是有名函数:特点是可以通过名字充分调用
def func(): func=函数的内存地址
pass
匿名函数就是没有名字的函数:特点是只能再定义使用一次
2.为何要用匿名函数
强调:
匿名函数的定义就相当于只产生了一个变量在值,而没有绑定任何名字,所以会在定义完之后就被回收,无法重复使用,只能在定义时使用一次。
应用:当某一个功能仅使用一次就没有再重复使用的必要了就应该定义成匿名函数。
3.如何使用匿名函数
lambda x,y:x+y
#print(lambda x,y:x+y)
res=(lambda x,y:x+y)(1,2)
print(res)
def sum2(x,y)
return x+y
salaries = {
'egon':3000,
'alex':100000000,
'wupeiqi':10000,
'yuanhao':2000
}
nums=[10,-1,11,9,23]
print(max(nums))
print(max(salaries.values()))
#key=函数的内存地址:作用是控制max函数的比较的值
def func(k):
return salaries[k]
print(max(salaries,key=func))
#1.将可迭代对象salaries变成迭代器对象iter_obj
#2.next(iter_obj)得到一个人名,然后将该人名当作参数传给key指定的函数,然后调用函数的返回值当作比较依据
#3.比较大小,取出最大值对应的人名
print(max(salaries,key=lambda k:salaries[k]))
print(min(salaries,key=lambda k:salaries[k]))
#sorted排序
nums=[10,-1,11,9,23]
print(sorted(nums))
print(nums)
salaries = {
'egon':3000,
'alex':100000000,
'wupeiqi':10000,
'yuanhao':2000
}
print(sorted(salaries,key=lamba k:salaries[k]))
print(sorted(salaries,key=lamba k:salaries[k]),reverse=True)
#map
names = ['alex','wupeqi','yuanhao','kevin','hu老师']
#方式一:手动实现
new_names=[]
for name in names:
new_names.append(name+'dsb')
print (new_names)
#方式二:列表生成式
new_names = [name + 'dsb' for name in names]
#print(new_names)
#方式三:map+匿名函数
res = map(lambda x: x + 'dsb', names)
print(res)
print(list(res))
#reduce
#方式一:手动实现
res=0
for i in range(101):
res+=i
print(res)
方式二:列表生成式
print(sum([i for i in range(101)]))
方式三:reduce+匿名函数
from functools import reduce
print(reduce(lambda x,y:x+y,[i for i in range(101)],100))
print(reduce(lambda x,y:x+y,[i for i in range(101)]))
print(reduce(lambda x,y:x+y,['h','e','l','l','o'],'-----------------'))
#filter
names=['alex_dsb','wxx_sb','kevin_sb','hu_sb','egon']
#方式一:手动实现
new_name=[]
for name in names:
if name.endwith('sb')
new_names.append(name)
print(new_names)
#方式二:列表生成式
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)
print(list(res))