三分鐘理解Python lambda

2021-10-09 00:04:27 字數 2634 閱讀 3534

這篇主要是複習一下

lambda表示式是一種匿名函式,對應python中的自定義函式def。

定義func函式,計算給定數x的平方

def

func

(x):

return x*x

等價於

func =

lambda x: x*x

用法,他就是乙個函式,像正常函式那樣呼叫就好:

func(6

)

可以看到,lambda只不過是定義函式的一種高階寫法,lambda簡化了函式定義的書寫形式。**更為簡潔。對於有些函式我們只用一次的,用lambda就十分友好,連函式名都沒有。

lambda表示式返回乙個函式,這個函式可以作為其他函式的引數。說起lambda,一般都是下面這個三個函式使用,常用的可以與lambda組合的內建函式有map(), filter(), reduce()。(注:python3全域性命名空間中移除了reduce函式)

map() 會根據提供的函式對指定序列做對映

reduce() 函式會對引數序列中元素進行累積

自 python3 之後,reduce函式從全域性命名空間中移除,放在了 functools模組,因為如果想正確執行,必須先導入

lambda表示式中可以插入if…else進行條件判斷,如

注意: if為真時的返回結果在if前面,條件在後面:(自己手打一下下面的程式就知道了)

f = lambda x:

'even'

if x%2==

0else

'odd'

# f(3)輸出結果 odd

等價於

def f

(x):

if x%2==

0:return

'even'

else

:return

'odd'

注意如果在lambda中使用if進行條件判斷,則else是必須宣告的,否則會引起報錯。如果不返回結果可以用 else none 表示。

import pandas as pd

df = pd.dataframe(

)df[

'pass'

]= df.

(lambda x:

'pass'

if x[1]

>=

60else

'not pass'

, axis=1)

#輸出新列 'pass',根據成績判斷通過與否,輸出df後結果為:

age score  pass022

87pass121

66pass222

79pass321

54 not pass420

59 not pass

x為dataframe物件,當引數axis=1時,x[1]等於第二列。

當用於series物件時,以上**等價於:

df[

'pass'

]= df[

'score'].

(lambda x:

'pass'

if x>

60else

'not pass'

)

不需要定義函式名(匿名函式)

**簡潔美觀

適用於定義簡單的計算

只有乙個表示式,不適用於複雜的計算

不夠直觀,難於理解,增加了維護成本

《三分鐘理解大小端》

無論筆試還是面試都有一定機率問怎麼判斷大小端,那麼你就很自豪的回答,大端就是資料高位元組放在低位址上,小端就是資料低位元組放在低位址上。好了您回答了這個恭喜下面讓你 實現一下,這個時候很多只是死記硬背的缺陷就會暴露出來。其實 的實現很多方法都是可以的,下面舉例最簡單的一種,就是初始化乙個16進製制的...

三分鐘理解依賴注入

如果在 class a 中,有 class b 的例項,則稱 class a 對 class b 有乙個依賴。例如下面類 human 中用到乙個 father 物件,我們就說類 human 對類 father 有乙個依賴。public class hunman 仔細看這段 我們會發現存在一些問題 1...

三分鐘理解知識蒸餾

知識蒸餾的意義 能夠壓縮模型,提公升模型效能 為什麼能夠壓縮模型?誰知道了告訴我一下!為什麼能提公升模型精度?栗子 分類問題有三個分類 貓,狗,烏龜,實際訓練過程中,比如當前的資料真實標籤是 貓,模型 出貓,狗,烏龜的概率分別是0.6,0.3,0.1,傳統思路 不錯,識別對了,貓的概率最高,給模型一...