iT邦幫忙

2024 iThome 鐵人賽

DAY 1
0

"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
名稱 沒有
程式長度 不一定 一行
回傳值 不一定 不一定

系列文
Python 進階 - 和基礎不同的挑戰1
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言