匿名函数

匿名函数:为了解决那些功能很简单的需求而设计的一句话函数。匿名函数的大体结构

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

 

posted @ 2019-01-31 23:21  舒畅123  阅读(101)  评论(0编辑  收藏  举报