1. 程式人生 > >小甲魚Python教程第21講--python函式:lambda表示式習題及答案

小甲魚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