1.匿名函数与lambda表达式
def ds(x):
return 2*x+1
lambda x:2*x+1 #lambda表达式
g=lambda x:2*x+1
g(5)
使用lambda表达式
lambda表达式的作用
1)lambda可以省下定义函数的过程,不用专门定义一个函数然后在写调用,使用lambda就可以使代码更加精简
2)有些只需要调用一两次的函数,使用lambda不需要考虑函数命名问题
3)简化代码的可读性,省去def()定义过程
2.两个牛逼的BIF
1)filter函数()
filter(func,seq)func为函数,seq为序列,用于过滤数据
def odd(x):
return x%2
temp=range(10)
show=filter(odd,temp)
list(show)
结果为: [1, 3, 5, 7, 9]
利用lambda也可以:
list(filter(lambda x:x%2,range(10)))
[1, 3, 5, 7, 9]
2)map()函数
语法:map(func,seq)
seq中每一个参数都被func加工计算,返回一个新的参数
ist(map(lambda x:x*2,range(10)))
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
习题及答案
0.请使用lambda表达式将下边函数转变为匿名函数?
def fun_A(x,y=3):
return x*y
答案:lambda x,y=3:x*y
1.请将下边的匿名函数转变为普通函数?
lambda x:x if x%2 else None
def odd(x):
if x%2:
return x
else:
return None
2.用filter()函数和lambda表达式快速求出100以内所有3的倍数?
list(filter(lambda x:x if x%3==0 else None,range(100)))
3.还记得zip函数吗?例如
list(zip([1,2,3],[4,5,6]))
[(1,4),(2,5),(3,6)]
但如果希望打包的形式是灵活多变的列表而不是元组,你能做到吗(采用map和lambda表达式的形式)
list(map(lambda x,y:[x,y],[1,3,5,7,9],[2,4,6,8,10]))
结果为:
[[1, 2], [3, 4], [5, 6], [7, 8], [9, 10]]
4.请目测一下表达式会打印什么?
def make_repeat(n):
return lambda s:s*n
double=make_repeat(2)
print(double(8))
print(double('fishC'))
会打印:
16
fishCfishC