P016_03_python匿名函数

匿名函数

为实现很简单需求而设计的一句话函数

匿名函数使用规范

  • 匿名函数关键字是lambda
  • lambda写在最前面其后跟参数,然后以「:」为分割,最后实际的逻辑也就是最后的结果
  • 必须一行结束
  • 多个参数用「,」分开

万能公式 lambda 参数 : 返回值

1
2
3
4
xxx = lambda n:n*n

#两个参数
xxx = lambda m,n:m*n

求字段里值最大的

1
2
3
4
5
6
7
xx = {'k1':10,'k2':20,'k3':30}

'''
def fn(key):
return xx[key]
'''
max(xx,key=lambda k:xx[k])

容易拿分的面试题

1.问执行结果

1
2
3
4
5
6
7
8
d = lambda p:p*2
t = lambda p:p*3

x = 2
x = d(x) # 4
x = t(x) # 12
x = d(x) # 24
print(x)

2.有俩元组((‘a’),(‘b’)),((‘c’),(‘d’))如何转换为列表[{‘a’:’c’},{‘b’:’d’}]

提示zip拉链方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# step001 先用zip把格式转换
a = (('a'),('b'))
b = (('c'),('d'))

res = zip(a,b) # 此时是一个生成器

'''
for i in res:
print(i)

结果:
('a','c')
('b':'d')
'''

# step002 遍历这个生成器 将元组变为字典
# filter/map/sorted/max/min

# 分析出:明显是用map
def func(tup):
return {tup[0]:tup[1]}
res = map(func,res)

# step003 优化用lambda

res = map(lambda tup:{tup[0]:tup[1]},res)
print(list(res))

# step004 各种优化
res = map(lambda tup:{tup[0]:tup[1]},zip(a,b))

res = list(map(lambda tup:{tup[0]:tup[1]},zip(a,b)))

3.刁钻面试题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
def xx():
return (lambda x:i*x for i in range(4))

[m(2) for m in xx()]

结果
[0,2,4,6]

解析
先看xx函数
def xx():
return (lambda x:0*x,lambda x:1*x,lambda x:2*x,lambda x:3*x)
[m(2) for m in xx()]

m(2)实际就是个函数 并传递参数2带入。。。
[0,2,4,6]

推荐一个流程图的工具ProcessOn