"lambda"是匿名函式 (Anonymous function),在Python中lambda常常是放在等號右邊,它可以讓一個變數變成函式,通常不會太複雜。
lambda 傳入參數 : 運算
程式:
a = lambda x : x*x
for i in range(5):
print(a(i))
輸出:
0
1
4
9
16
利用lambda讓a可以回傳平方的結果,再用for迴圈把i傳給a,也可以直接執行lambda。
(lambda 傳入參數 : 運算)(參數)
程式:
for i in range(5):
print((lambda x : x*x)(i))
輸出:
0
1
4
9
16
lambda還可以搭配for迴圈或if。
程式:
x = [1,2,3]
y = [4,5,6]
plus = lambda a,b : [a[i]+b[i] for i in range(min(len(a),len(b)))] #把a和b內的每個數分開相加,再合成一個清單。
minus = lambda a,b : [a[i]-b[i] for i in range(min(len(a),len(b)))] #把a和b內的每個數分開相減,再合成一個清單。
print(plus(x,y))
print(minus(x,y))
輸出:
[5, 7, 9]
[-3, -3, -3]
[4, 10, 18]
[0.25, 0.4, 0.5]
需要用到傳入函式的地方,較需要用到lambda,例如:threading、filter、map、sorted
threading.Thread(target=函式)
程式:
import threading,time
threading.Thread(target=lambda:time.sleep(1)) #因為用了threading,所以time.sleep(1)不會有作用
filter(判斷函式,傳入資料)
程式:
n = range(10)
print(list(filter(lambda x: (x % 2 != 0), n))) #在n中,只挑奇數
print(list(filter(lambda x: (x > 4), n))) #在n中,只挑大於4的數
輸出:
[1, 3, 5, 7, 9]
[5, 6, 7, 8, 9]
map(判斷函式,傳入資料)
程式:
print(list(map(lambda x : len(x)*2, ['apple', 'banana', 'cherry']))) #把字串清單轉成字串長度(數字)乘2的清單,因為'lambda x : len(x)'等於'len'
輸出:
[10, 12, 12]
sorted(iterable, key=函式(None), reverse=布林值(False))
程式:
print(sorted((3, 4, 5, 6, 7, 8), key=lambda x : abs(5-x))) #照和5的差由小排到大
輸出:
[5, 4, 6, 3, 7, 8]
這樣就不需要用def了,適合只會呼叫一次的函式。lambda不一定只能呼叫一次,只要用變數就可以讓lambda函數重複使用。
def | lambda | |
---|---|---|
名稱 | 有 | 沒有 |
程式長度 | 不一定 | 一行 |
回傳值 | 不一定 | 不一定 |