帶有示例的 Python Lambda 函數

已發表: 2022-06-04

目錄

Python——簡介

Python 是一種非常流行的通用編程語言。 它是一種解釋型高級語言,通過使用重要的縮進來強調代碼的可讀性。 程序員使用 Python 為任何規模的項目編寫乾淨、符合邏輯的代碼。

Python 在 1980 年代被 Guido Van Rossum 構想為 ABC 編程語言的繼承者。 從那時起,由於其多功能性,Python 一直是一種流行的編程語言。

函數——簡介

函數是調用時工作的代碼塊,可以在程序中調用 n 次。 它們是結構化的代碼語句並執行特定的功能,並且可以隨時使用。 功能基本上分為:

  • 用戶定義函數 (USF) — 可根據程序員的要求更改的可自定義函數。
  • 內置函數 (BIF) — 無法自定義且必須以可用方式使用的函數。

在 upGrad 在線學習數據科學課程

Python Lambda 函數

Python Lambda 函數本質上是匿名的,因為它們沒有明確的名稱。 def函數用於表示 Python 中的普通函數 同時,關鍵字Lambda用於定義匿名 Python 函數。

Lambda 函數是一個小函數,可以接受多個參數,但只能接受一個表達式。 它們還具有比常規 Python 函數更嚴格但更簡潔的語法。 lambda 函數於 1994 年與map ()、 filter () 和reduce () 函數一起添加到 Python 語言中。

檢查我們的美國 - 數據科學計劃

數據科學和商業分析專業證書課程 數據科學理學碩士 數據科學理學碩士 數據科學高級證書課程
數據科學執行 PG 計劃 Python 編程訓練營 商業決策數據科學專業證書課程 數據科學高級課程

要定義匿名函數,必須使用 lambda 關鍵字,例如def用於普通函數。 Python中定義的匿名函數分為三個部分:

  • 關鍵字 lambda
  • 參數或綁定變量
  • 函數體

句法

lambda 函數的語法如下:

Lambda p1, p2:表達式

p1 和 p2 是這裡的參數。 在 lambda 函數中添加參數沒有限制。 您可以根據需要添加盡可能多或盡可能少的內容。 但是 lambda 函數在語法上僅限於一個表達式。

Python中的lambda函數示例:

示例 1

x =“Lambda 函數”

# lambda 得到傳遞以打印

(λ x : 打印(x))(x)

輸出

Lambda 函數

示例 2

x = λ a : a + 10

打印(x(5))

輸出

15

我們的學習者還閱讀了:免費在線學習 Python

普通函數和 lambda 函數的區別

lambda 函數與普通函數相比有一些語法差異。

  • 正文中只使用表達式而不是語句。 如果使用任何語句,如 pass、assert、return 或 raise,輸出將顯示 SyntaxError。

例子

>>> (lambda x: 斷言 x == 2)(2)

文件“<input>”,第 1 行

(lambda x: 斷言 x == 2)(2)

^

SyntaxError:無效的語法

  • lambda 函數只能作為單個表達式存在。 即使表達式使用多個字符串分佈在整個正文中,它也只能保留為單個表達式。

示例

>>> (λx:

…(x % 2 和“奇數”或“偶數”))(3)

'奇怪的'

當 lambda 參數為奇數時,代碼將返回字符串奇數,如果不是,則返回偶數。 代碼跨越兩行,因為它位於括號內,但仍保留為單個表達式。

  • lambda 函數不支持類型註釋。 向 lambda 語法添加註釋將導致語法錯誤。
  • IIFE 或立即調用函數表達式是在定義後立即執行的函數。 它也被稱為自執行匿名函數。 IIFE 是 lambda 函數的直接結果,因為 lambda 函數在定義時是可調用的。

現在,讓我們看看普通函數和 lambda 函數之間的主要區別是:

(資源)

Lambda 函數 – 優點和缺點

優點

  • 它使代碼更具可讀性。
  • 非常適合一次性使用的功能。
  • 易於理解,可用於簡單的邏輯解釋。

缺點:

  • 不能執行多個獨立表達式。
  • 如果代碼在正常 (def) 函數中跨越多於一行,則使用 lambda 函數並不理想​​。
  • 所有的輸入、輸出和操作都不能像普通函數一樣在文檔字符串中解釋。

在哪裡使用 Lambda?

儘管普通的 def 函數和 lambda 函數有關鍵區別,但在內部,它們是在內部處理的。

  • Python 中 lambda 函數的常見用途是用於函數式編程。 您可以在函數式編程中使用 lambda 將函數作為參數提供給不同的函數。
  • 如果您需要減少指定函數的行數,lambdas 是您的最佳選擇。
  • Lambda 還與 map()、reduce() 等高階函數一起使用。
  • 可以使用 lambda 函數跟踪對 UI 框架事件的響應。

在哪裡避免使用 lambda 函數?

  • 編寫複雜的 lambda 函數不是一個好習慣,因為它很難解密。
  • 避免使用 lambda 函數進行重複操作。
  • 如果代碼不遵循 Python 樣式指南 (PEP8)。

Lambda 函數的測試與常規函數完全一樣。 unittest 和 doctest 都可以用於此。

閱讀我們的熱門美國 - 數據科學文章

具有認證的數據分析課程 帶有認證的 JavaScript 免費在線課程 被問到最多的 Python 面試問題和答案
數據分析師面試問題和答案 美國頂級數據科學職業選擇 [2022] SQL 與 MySQL – 有什麼區別
數據類型的終極指南 美國 Python 開發者薪資 美國數據分析師薪資:平均薪資

帶有 filter() 的 Lambda 函數

Filter() 是一個內置的 Python 函數和列表作為參數。 當所有可迭代項都在一個列表中時使用過濾器(),並返回另一個列表,其中包含函數為真的項目。

示例

# Python代碼來說明

# filter() 和 lambda()

li = [5, 7, 22, 97, 54, 62, 77, 23, 73, 61]

final_list = list(filter(lambda x: (x%2 != 0) , li))

打印(最終列表)

輸出:

[5, 7, 97, 77, 23, 73, 61]

(資源)

示例

# 程序只過濾掉列表中的偶數項

my_list = [1, 5, 4, 6, 8, 11, 3, 12]

new_list = list(filter(lambda x: (x%2 == 0) , my_list))

打印(新列表)

輸出

[4、6、8、12]

帶有 map() 的 Lambda 函數

當所有項目都在列表中時使用 map 函數,並返回列表以及該函數為每個項目返回的項目。

示例:要將列表中每個項目的值加倍,代碼如下:

my_list = [1, 5, 4, 6, 8, 11, 3, 12]

new_list = list(map(lambda x: x * 2 , my_list))

打印(新列表)

輸出:

[2、10、8、12、16、22、6、24]

示例:對列表中的每個數字進行立方,代碼如下

list_1 = [1,2,3,4,5,6,7,8,9]

立方=地圖(lambda x:pow(x,3),list_1)

列表(立方)

輸出:

[1、8、27、64、125、216、343、512、729]

帶有 reduce() 函數的 Lambda 函數

Python 中的 reduce() 函數是一個列表和一個參數。 調用它以返回一個可迭代的新簡化列表。 它有點類似於加法功能。

示例 1

注意:此示例來自 functools 庫。

要獲得列表的總和,代碼將是,

# Python代碼來說明

# reduce() 與 lambda()

# 獲取列表的總和

從 functools 導入減少

li = [5, 8, 10, 20, 50, 100]

sum = reduce((lambda x, y: x + y), li)

打印(總和)

輸出:

193

結論

長期以來,在 Python 中使用 lambda 函數一直是程序員之間有爭議的話題。 雖然 lambda 確實可以用內置函數、列表推導和標準庫替換,但對 lambda 函數的理解也是必要的。 它可以幫助您了解編程的基本原理並編寫更好的代碼。

即使您不親自使用 lambda 函數,也可能會在其他人的程序中遇到這些情況。 因此,無論如何,建議您具備 lambda 函數的基本知識。

如果您想學習成熟的 Python 並提升您在數據科學和商業分析方面的職業生涯,upGrad 的美國頂尖大學馬里蘭大學在線數據科學和商業分析專業證書課程是您的最佳選擇。

該計劃提供了在全球前 100 所大學之一學習的機會,並獲得馬里蘭史密斯的證書,以增加您在該領域取得成功的機會。 這是一個為期 9 個月的課程,可以訪問 300 多個招聘合作夥伴,保證為應屆生提供面試機會,以及 6 次輔導電話。

Python 中的裝飾器是什麼?

Python 中接受一個函數的參數並返回另一個函數的函數稱為裝飾器。 它用裝飾器語法表示。 裝飾器可以應用於 lambda 函數,但不能使用裝飾器語法。 它通常用於調試目的。 或者,可以將 lambda 函數用作裝飾器,但不建議這樣做。

Python Lambda 函數中的參數是什麼?

像普通 def 函數一樣的 Lambda 函數支持不同的參數傳遞方式。 其中包括: 僅關鍵字參數 關鍵字參數/命名參數 Varargs/ 參數變量列表 關鍵字參數變量列表。

Python Lambda 函數中的閉包是什麼?

閉包或詞法閉包是函數,其中除參數之外的每個自由變量都綁定到函數封閉範圍內的特定值。 可以從任何地方調用閉包。 像普通 def 函數這樣的 Lambda 函數可以是閉包。