Python lambda表示式及用法

2021-09-24 23:15:08 字數 2222 閱讀 7016

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...