lambda 表示式是現代程式語言爭相引入的一種語法,如果說函式是命名的、方便復用的**塊,那麼 lambda 表示式則是功能更靈活的**塊,它可以在程式中被傳遞和呼叫。
回顧《python函式高階用法》一節中,get_math_func() 函式將返回三個區域性函式之一。該函式**如下:
def get_math_func(type) :
# 定義三個區域性函式
…# 返回區域性函式
if type == "square" :
return square
if type == "cube" :
return cube
else:
return factorial
由於區域性函式的作用域預設僅停留在其封閉函式之內,因此這三個區域性函式的函式名的作用太有限了,即僅僅是在程式的 if 語句中作為返回值使用。一旦離開了 get_math_func() 函式體,這三個區域性函式的函式名就失去了意義。
既然區域性函式的函式名沒有太大的意義,那麼就考慮使用 lambda 表示式來簡化區域性函式的寫法。
如果使用 lambda 表示式來簡化 get_math_func() 函式,則可以將程式改寫成如下形式:
def get_math_func(type) : result=1 # 該函式返回的是lambda表示式 if type == 'square': return lambda n: n * n # ① elif type == 'cube': return lambda n: n * n * n # ② else: return lambda n: (1 + n) * n / 2 # ③ # 呼叫get_math_func(),程式返回乙個巢狀函式 math_func = get_math_func("cube") print(math_func(5)) # 輸出125 math_func = get_math_func("square") print(math_func(5)) # 輸出25 math_func = get_math_func("other") print(math_func(5)) # 輸出15.0在上面**中,return 後面的部分使用 lambda 關鍵字定義的就是 lambda 表示式,python 要求 lambda 表示式只能是單行表示式。
注意:由於 lambda 表示式只能是單行表示式,不允許使用更複雜的函式形式,因此上面 ③ 號**處改為計算 1+2+3+…+n 的總和。
lambda 表示式的語法格式如下:
lambda [parameter_list] : 表示式
從上面的語法格式可以看出 lambda 表示式的幾個要點:
實際上,lambda 表示式的本質就是匿名的、單行函式體的函式。因此,lambda 表示式可以寫成函式的形式。例如,對於如下 lambda 表示式:
lambda x , y:x + y
可改寫為如下函式形式:
def add(x, y): return x+ y
上面定義函式時使用了簡化語法:當函式體只有一行**時,可以直接把函式體的**放在與函式頭同一行。
總體來說,函式比 lambda 表示式的適應性更強,lambda 表示式只能建立簡單的函式物件(它只適合函式體為單行的情形)。但 lambda 表示式依然有如下兩個用途:
下面**示範了通過 lambda 表示式來呼叫 python 內建的 map() 函式:
# 傳入計算平方的lambda表示式作為引數 x = map(lambda x: x*x , range(8)) print([e for e in x]) # [0, 1, 4, 9, 16, 25, 36, 49] # 傳入計算平方的lambda表示式作為引數 y = map(lambda x: x*x if x % 2 == 0 else 0, range(8)) print([e for e in y]) # [0, 0, 4, 0, 16, 0, 36, 0]正如從上面**所看到的,內建的 map() 函式的第乙個引數需要傳入函式,此處傳入了函式的簡化形式:lambda 表示式,這樣程式更加簡潔,而且效能更好。
本節所介紹的 lambda 表示式是 python 程式設計的核心機制之一。python 語言既支援面向過程程式設計,也支援物件導向程式設計。而 lambda 表示式是 python 面向過程程式設計的語法基礎,因此讀者必須引起重視。
python 的 lambda 表示式只是單行函式的簡化版本,因此 lambda 表示式的功能比較簡單。
Python lambda表示式學習
lambda只是乙個表示式,函式體比def簡單很多。lambda的主體是乙個表示式,而不是乙個 塊。僅僅能在lambda表示式中封裝有限的邏輯進去。lambda表示式是起到乙個函式速寫的作用。允許在 內嵌入乙個函式的定義。如下例子 定義了乙個lambda表示式,求三個數的和。再看乙個例子 用lamb...
原創 python lambda表示式
對於lambda先看一下 python filter函式 一文提到的函式 li boy 41 tim qq 1125891 filter fu,li 41 1125891 可以用lambd一句話表示 li boy 41 tim qq 1125891 filter lambda x x.isdigit...
python lambda表示式詳解
python lambda表示式詳解 1 lambda簡介 先來看一段 示例 第一行是lambda宣告,x,y相當於傳入的引數,整個函式會返回x y的值。lambda作為乙個表示式,定義了乙個匿名函式,上例的 x,y為入口引數,x y為函式體。在這裡lambda簡化了函式定義的書寫形式。python...