匿名函数,好像也就是 lambda 表达式
先来看一段函数,返回
def func(n):
return n * 3
print(func(5))
15
用lambda表达式写:
func = lambda n: n*3
print(func(5))
15
匿名函数表达式:
函数名 = lambda 参数:返回值 # 参数可以有多个,用逗号隔开
# 匿名函数不管逻辑多复杂,只能写一行,且逻辑执行结束的内容就是返回值
# 返回值和正常的函数一样可以是任意数据类型
练一练:
def add(x,y):
return x + y add = lambda x,y: x+y
匿名函数的牛扳之处在于它真的可以匿名:
### 假设我们想取到字典中,value最大的key是什么
dic = {'k1':4,'k2':12,'k3':20,'k4':5}
print(max(dic))
# 按照普通方法,我们只能取到key值
k4
def func(k):
return dic[k]
print(max(dic,key=func))
# 此处定义一个函数,内置函数max()按照value值去取key
# 转换成lambda匿名函数 ret = max(dic,key=lambda k:dic[k])
print(ret)
k3
可以与lamba 表达式合作的内置函数有,min,max,filter,map sorted等
练一练2:
1.现有两元组(('a'),('b')),(('c'),('d')),请使用python中匿名函数生成列表[{'a':'c'},{'b':'d'}] 2.以下代码的输出是什么?请给出答案并解释。
def multipliers():
return [lambda x:i*x for i in range(4)]
print([m(2) for m in multipliers()])
请修改multipliers的定义来产生期望的结果。
答案1分析:提到匿名函数就要想到内置函数
# ret1 = zip((('a'),('b')),(('c'),('d'))) # zip()函数的拉索功能
# # def func(tup):
# # return {tup[0]:tup[1]}
# ret2 = map(lambda tup:{tup[0]:tup[1]},ret1) # map()函数 以及 lambda表达式
# print(list(ret2))
# # ret3 = []
# # for i in ret2:
# # ret3.append(i)
# # print(ret3)
###最终答案
print(list(map(lambda tup:{tup[0]:tup[1]},zip((('a'),('b')),(('c'),('d'))))))