小甲鱼Python教程第21讲--python函数:lambda表达式习题及答案

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函数吗?例如

listzip[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

你可能感兴趣的:(小甲鱼python教程,python)