瞭解python lambda函式的初學者指南

Python中的lambda是最有用、最重要、最有趣的特性之一。下面是如何使用它們以及它們為什麼有用。...

Python中的lambda是最有用、最重要、最有趣的特性之一。不幸的是,他們也很容易誤解和出錯。

lambda-functi***-python

在本文中,我們將解釋您需要了解的關於這些神祕函數的一切,如何使用它們,以及它們為什麼有用。

在深入研究這些實際示例之前,您可能希望設置一個Python虛擬環境。如果您甚至不想這樣做,那麼您至少應該使用交互式在線pyth***hell來嘗試這些示例。

在python中lambda是什麼?

lambda只是在Python中定義函數的一種方法。它們有時被稱為“lambda運算符”或“lambda函數”。

如果您以前使用過Python,那麼您可能已經使用def關鍵字定義了函數,到目前為止,它對您來說運行良好。那麼,為什麼還有其他方法來做同樣的事情呢?

區別在於lambda函數是匿名的。也就是說,它們是不需要命名的函數。它們用於創建小型的一次性函數,以防“真正的”函數太大和太大。

lambda返回一個可以分配給變量的函數對象。lambda可以有任意數量的參數,但它們只能有一個表達式。不能在lambdas中調用其他函數。

lambda函數最常見的用法是在需要一個簡單的單行函數的代碼中,如果要編寫一個完整的普通函數就太過了。下面的“Map、Filter和Reduce如何?”,將更詳細地介紹這一點。

如何在python中使用lambdas

在看lambda函數之前,讓我們先看一下用“傳統”方式定義的超基本函數:

def add_five(number): return number + 5 print(add_five(number=4))

how to use lamba functi*** in python

這個函數非常基本,但它用於說明lambdas。你的可能比這更復雜。此函數將通過number參數傳遞給它的任何數字加5。

以下是lambda函數的外觀:

add_five = lambda number: number + 5 print(add_five(number=4))

how to use lamba functi*** in python

使用lambda這個詞而不是def。不需要括號,但lambda關鍵字後面的任何單詞都將創建為參數。冒號用於分隔參數和表達式。在本例中,表達式是數字+5。

不需要使用return關鍵字——lambda會自動為您執行此操作。

下面是如何創建具有兩個參數的lambda函數:

add_numbers_and_five = lambda number1, number2: number1 + number2 + 5 print(add_numbers_and_five(number1=4, number2=3))

how to use lamba functi*** in python

如果你仍然不確定蘭博達斯的觀點,下一節將深入並幫助你看到光明。

帶有map、filter和reduce的python lambdas

Python核心庫有三個方法,分別是map、reduce和filter。這些方法可能是使用lambda函數的最佳理由。

map函數需要兩個參數:一個函數和一個列表。它接受該函數並將其應用於列表中的每個元素,將修改後的元素列表作為映射對象返回。list函數用於將生成的映射對象再次轉換回列表。

下面介紹如何在沒有lambda的情況下使用map:

list1 = [2, 4, 6, 8]print(list1)def add_five(number): return number + 5 new_list = list(map(add_five, list1))print(new_list)

how to use lamba functi*** in python

這個map函數非常方便,但可能更好。add\u five函數作為參數傳入,但是如果您不想每次使用map時都創建一個函數呢?你可以用lambda代替!

下面是相同代碼的樣子,只是函數被lambda替換了:

list1 = [2, 4, 6, 8]print(list1) new_list = list(map(lambda x: x + 5, list1))print(new_list)

how to use lamba functi*** in python

如您所見,不再需要整個add\u five函數。相反,lambda函數用於保持整潔。

使用過濾功能,過程大致相同。Filter接受一個函數並將其應用於列表中的每個元素,並創建一個新的列表,其中只包含導致函數返回True的元素。

首先,沒有lambdas:

numbers = [1, 4, 5, 10, 20, 30]print(numbers)def greater_than_ten_func(number): if number > 10: return True else: return Falsenew_numbers = list(filter(greater_than_ten_func, numbers)) print(new_numbers)

how to use lamba functi*** in python

這個代碼沒有問題,但是有點長了。讓我們看看lambda可以刪除多少行:

numbers = [1, 4, 5, 10, 20, 30]print(numbers)new_numbers = list(filter(lambda x: x > 10, numbers))print(new_numbers)

how to use lamba functi*** in python

lambda函數已經取代了對整個大於十個函數的需要!用五個簡單的詞就完成了。這就是lambda強大的原因:它們減少了簡單任務的混亂。

最後,讓我們看看reduce。Reduce是另一個很酷的Python函數。它對列表中的所有項應用滾動計算。你可以用它來計算總數,或者把所有的數字相乘:

from functools import reducenumbers = [10, 20, 30, 40]print(numbers)def summer(a, b): return a + b result = reduce(summer, numbers)print(result)

how to use lamba functi*** in python

這個例子需要從functools模塊導入reduce,但是不要擔心,functools模塊是Python核心庫的一部分。

故事與lambda非常相似,不需要函數:

from functools import reducenumbers = [10, 20, 30, 40]print(numbers) result = reduce(lambda a, b: a + b, numbers)print(result)

how to use lamba functi*** in python

關於python lambdas的注意事項

這些示例展示了lambda函數以及Python核心庫中的map、filter和reduce是多麼容易。儘管如此,lambda函數還是有一些用處。

如果你做的不僅僅是一個基本的任務,或者你想調用其他的方法,使用一個普通的函數。lambda非常適合於一次性匿名函數,但它們必須只有一個表達式。如果您的lambda開始看起來像一個正則表達式,那麼可能是時候重構到一個專用的方法了。

有關更多提示,請查看我們的Python面向對象編程指南和Python初學者常見問題解答指南。

  • 發表於 2021-03-24 12:14
  • 閱讀 ( 54 )
  • 分類:程式設計

你可能感興趣的文章

紅寶石(ruby)和python(python)的區別

關鍵區別——ruby與python Ruby和Python是高階程式語言,因為它們遵循與英語語言相似的語法。因此,程式設計師很容易理解這些語言。Ruby和Python都是解釋語言。兩種語言都有大量的社群支援。Ruby和Python的一個主要優點是這些語...

  • 發佈於 2020-10-19 17:41
  • 閲讀 ( 56 )

如何用python程式設計和控制arduino

Python風靡了編碼界。隨著這門新語言的興起,DIY電子領域也蓬勃發展。來自Arduino和Raspberry Pi等公司的開發板和單板計算機改變了人們生產家用電子產品的方式。如果你能用Python程式設計一個Arduino,那不是很棒嗎? ...

  • 發佈於 2021-03-11 16:20
  • 閲讀 ( 72 )

如何在excel中計算基本統計:初學者指南

... Excel最有用的內建函式之一是計算一組數字的平均值。如果您以前沒有使用過Excel函式,您會對它的簡單性印象深刻。只需輸入函式名,選擇要應用該函式的單元格,然後按Enter鍵。 ...

  • 發佈於 2021-03-12 03:31
  • 閲讀 ( 49 )

java8lambdas簡介

如果您是一名Java程式設計師,並且有興趣瞭解更多關於Java8Lambda的知識,那麼在本文中,我們將更深入地瞭解lambda語法和用法。 ...

  • 發佈於 2021-03-12 08:09
  • 閲讀 ( 46 )

9個最好的pi程式設計資源,把你的樹莓pi使用

... 三。編寫raspberry pi:python入門 ...

  • 發佈於 2021-03-14 03:57
  • 閲讀 ( 51 )

arduino vs raspberry pi:哪臺是你的迷你電腦?

... 我希望您現在能更清楚地瞭解Arduino和Raspberry Pi之間的區別,以及為什麼在特定的應用程式中一種可能比另一種更好。在下面的評論中向我們展示一些Arduino/Pi專案! ...

  • 發佈於 2021-03-15 06:18
  • 閲讀 ( 49 )

透過5個入門課程學習gmail、google應用程式和android基礎知識

... 所以,如果你想擁抱科技的世紀,你需要很好地瞭解谷歌及其產品。最好參加一個簡短的課程,讓你熟悉應用程式,特別是如果你是一個初學者。否則,有一張備忘單可能會有所幫助。不管是哪種方式,你都能很好地處...

  • 發佈於 2021-03-15 13:13
  • 閲讀 ( 56 )

初學者指南安裝軟體在ubuntu與apt

... 如果您想繼續瞭解APT,可以使用以下命令瀏覽APT手冊頁: ...

  • 發佈於 2021-03-16 21:40
  • 閲讀 ( 42 )

透過我的5門頂級課程真正學習javascript

...az是一位經驗豐富的JavaScript講師,他會帶您透過實踐練習瞭解變數和迴圈。不,你不會在3.5小時後成為專家,但你肯定會對應對未來更大的挑戰更有信心。 ...

  • 發佈於 2021-03-17 09:52
  • 閲讀 ( 59 )

你應該知道的5種函數語言程式設計語言

...許您將JavaScript或Python的概念引入Haskell。如果你想更多地瞭解這門語言,學習Haskell是一個受歡迎的起點。 ...

  • 發佈於 2021-03-20 18:46
  • 閲讀 ( 50 )