匿名函数,好像也就是 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'))))))