匿名函数
匿名函数:为了解决那些功能很简单的需求而设计的一句话函数。匿名函数的大体结构
def func(x): return x**x print(func(2)) #等价于下面的匿名函数 func=lambda x:x**x#注意这里条件要一次性写完不允许换行 print(func(2))
上面是我们对calc这个匿名函数的分析,下面给出了一个关于匿名函数格式的说明
函数名 = lambda 参数 :返回值
#参数可以有多个,用逗号隔开
#匿名函数不管逻辑多复杂,只能写一行,且逻辑执行结束后的内容就是返回值
#返回值和正常的函数一样可以是任意数据类型
1 dic={'k1':10,'k2':100,'k3':30} 2 def func(key): 3 return dic[key] 4 5 # func(dic[key]) 6 7 print(max(dic))#k3的ascii码最大,所以结果是k3 8 print(max(dic,key=lambda k:dic[key]))
匿名函数和map的结合
1 res = map(lambda x:x**2,[1,5,7,4,8]) 2 for i in res: 3 print(i)
匿名函数和filter的结合
1 res = filter(lambda x:x>10,[5,8,11,9,15]) 2 for i in res: 3 print(i)
2.现有两元组(('a'),('b')),(('c'),('d')),请使用python中匿名函数生成列表[{'a':'c'},{'b':'d'}]
1 # 2.现有两元组(('a'),('b')),(('c'),('d')),请使用python中匿名函数生成列表[{'a':'c'},{'b':'d'}] 2 3 def func(tup): 4 return {tup[0]:tup[1]} 5 6 ret=zip((('a'),('b')),(('c'),('d'))) 7 8 9 res=map(func,ret) 10 # print(res) 11 for j in res: 12 print(j) 13 # s=lambda x,y:zip(x,y)
利用匿名函数
1 ret=zip((('a'),('b')),(('c'),('d'))) 2 res=map(lambda tup:{tup[0]:tup[1]},ret) 3 print(list(res))
3.以下代码的输出是什么?请给出答案并解释。 def multipliers(): return [lambda x:i*x for i in range(4)] print([m(2) for m in multipliers()]) 请修改multipliers的定义来产生期望的结果。
1 def multipliers(): 2 return [lambda x:i*x for i in range(4)] 3 print([m(2) for m in multipliers()]) 4 5 D:\anoconda\python.exe F:/python/python学习/人工智能/第一阶段day2/2.作业.py 6 [6, 6, 6, 6] 7 8 Process finished with exit code 0
修改后
1 def multipliers(): 2 return (lambda x:i*x for i in range(4)) 3 print([m(2) for m in multipliers()]) 4 5 6 D:\anoconda\python.exe F:/python/python学习/人工智能/第一阶段day2/2.作业.py 7 [0, 2, 4, 6] 8 9 Process finished with exit code 0