小甲魚Python教程第21講--python函式:lambda表示式習題及答案
阿新 • • 發佈:2019-02-01
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