4.3

yblll發表於2024-06-18

python 之lambda表示式

今天做題的時候發現了lambda表示式,就去網上搜了搜,這麼說吧,lambda表示式算是python一種比較方便的語法了,主要作用是代替簡單的函式,免去了編寫函式的煩惱,語法也更加地簡潔。下面就簡單介紹一下lambda的使用場景。從本質上來講,lambda是一個函式,可以接受引數輸入。

下面附上所搜到的知識點,詳情請看python 之lambda表示式 - 知乎 (zhihu.com)

lambda 基礎用法
lambda表示式的基礎用法,做簡單的加減乘除,或者格式修改操作。

funca = lambda x: x+1 
funca(2)
out:3

lambda和if結合使用

lambda表示式既然和函式一樣那麼也可以用邏輯控制流,用if去做判斷,返回我們想要的東西。

解釋
funcb = lambda x:x+1 if x==1 else 0
funcb(1)
out:2
funcb(2)
out:0

lambda表示式和for迴圈結合使用

跟if不一樣,lambda表示式裡用for迴圈會報錯,但是也可以for迴圈一起用,只不過比較複雜,用了for迴圈生成的是一個由函式組成的列表。

funcc = [lambda x: x+j for j in range(5)]
[f(1) for f in funcc]
out:[5, 5, 5, 5, 5]

但是從上面的輸出來看,又讓人非常困惑,為什麼全都是5,而不是[1,2,3,4,5]。這裡需要解釋的是:這個迴圈控制了輸出五個lambda函式,但是每個函式都是執行到迴圈的最後一步,也就是說x+j實際上和x+4是等價的,每個函式都一樣。

lambda表示式的巢狀使用

這個雖然說也有用的,但是可讀性特別差,儘量避免使用,畢竟用lambda表示式是為了簡單,這麼用實在是讓人捉摸不透。還是舉個例子:

解釋
funcd = lambda: lambda x: x + 5
funcdd = funcd()
funcdd(3)
out:8

看完你應該也覺得沒有任何意義吧。

lambda表示式和map函式結合使用

我估計這個是最常用的使用方法,因為map本身的作用就是對一個list套用一個方法。來看例子。

list1 = list(map(lambda x: x**2,[1,2,3,4]))
out: [1, 4, 9, 16]

lambda表示式和filter函式結合使用

這個是另一個比較重要的應用場景就是篩選出來符合條件的資料。

list2 = list(filter(lambda x:x<=4,[2,3,4,5]))
out:[2, 3, 4]

lambda表示式用於pandas

pandas裡的apply函式,可以用自己編寫的lambda表示式這 個是非常方便的,也是經常使用,舉一個小數轉化為百分比的案例吧。

#先生成一個5行一列的dataframe

解釋
pd_1 = pd.DataFrame([round(np.random.random(),2) for _ in range(5)])
#資料長這樣
      0
0  0.95
1  0.62
2  0.04
3  0.61
4  0.77
#接下來轉換
pd_2 = pd_1[0].apply(lambda x: '{:.0%}'.format(x))
out:
0    95%
1    62%
2     4%
3    61%
4    77%

透過以上例子,我們發現,lambda的使用大量簡化了程式碼,使程式碼簡練清晰。

相關文章