Python中的lambda函數
Python中的lambda函數
在Python中,我們使用lambda關鍵字來聲明一個匿名函數,這就是為什麼我們將它們稱為「lambda函數」。匿名函數是指沒有聲明函數名稱的函數。儘管它們在語法上看起來不同,lambda函數的行為方式與使用def關鍵字聲明的一般函數相同。以下是Python中 lambda函數的特點:
lambda函數可以接受任意數量的參數,但函數只能包含一個表達式。表達式是lambda函數執行的一段代碼,它可以返回任何值,也可以不返回任何值。
lambda函數可以返回函數對象。
從語法上講,lambda函數只能有一個表達式。
在本文中,我們將詳細討論Python中的lambda函數,並演示使用它們的例子。
創建一個lambda函數
我們使用以下語法來聲明lambda函數:
正如上面所述,我們可以有很多個參數,但是只能有一個表達式。lambda操作符不能有任何聲明,它返回一個函數對象,我們可以將此函數對象賦值給任何變數。
例如:
這段代碼中,lambda num: num% 2是lambda函數。num是參數,num%2是表達式,用來計算後返回結果。該表達式獲取輸入參數除以2的模數並返回。將5作為參數傳入,通過除以2進行計算,得到餘數1.
你應該注意到,上面腳本中的lambda函數沒有分配任何名稱。它只是返回一個函數對象,該對象被分配給標識符remainder。然而,儘管函數是匿名的,我們還是可以像調用普通函數那樣調用它。聲明語句如下:
上面定義的lambda函數返回一個product對象,該對象具有兩個參數的值。
為什麼使用lambda 函數?
Lambda函數主要在短時間內需要一個函數時才使用。當你想要將函數作為參數傳遞給高階函數(即以其他函數作為參數的函數)時,通常使用這種方法。
下面的例子演示了在其他函數中使用匿名函數:
在上面的例子中,我們有一個函數,該函數傳入一個參數,將它與一個未知數相乘。我們來演示一下怎樣使用上面的函數:
在上面的腳本中,我們使用一個lambda函數與我們傳入的數字10相乘。同樣的函數也可以用來與數字1000相乘。
我們很有可能會使用到testfunc函數來在一個程序中定義上面的兩個lambda函數:
Lambda函數可以和Python的內置函數一起使用,例如map,filter等。
在接下來的章節中,我們將討論怎樣在各種Python內置函數中使用lambda函數。
filter 函數
Python中的filter函數接受一個列表參數和一個lambda函數參數。它的語法如下:
這裡的object必須是一個返回布爾值的lambda函數。對迭代器中的每一項都會調用該函數來計算其結果是True或False。請注意,本函數只能接受一個迭代器作為輸入。
lambda函數,和需要被處理的列表,被一同傳遞給filter函數。filter函數將返回一個新的列表,新的列表中只包含舊列表中被lambda函數處理後返回值為True的那些元素。請參考下面給出的例子:
在上面的例子中,我們先創建了一個包含一系列整數的列表number_list,接著我們創建了一個lambda函數來檢查大於7的整數。此lambda函數作為參數傳遞給filter函數,過濾後的結果保存在一個名為filtered_list的新列表中。
map 函數
map函數是另一個以一個函數對象和一個列表作為參數的內置函數。map函數的語法如下:
傳入map函數的迭代器可以是字典,列表等。map函數主要是根據lambda函數定義的邏輯來將輸入迭代器中的每一項映射到輸出迭代器中的相關項。請參考以下的例子:
在上面的腳本中,我們先定義了一個由隨機數組成的列表numbers_list,接著我們調用map函數,並傳遞一個lambda函數作為參數。此lambda函數計算每個數除以2之後的餘數。映射的結果保存在一個名為mapped_list的列表中。最後,我們列印出列表的內容。
結論
在Python中,一個lambda函數是一個只有一行代碼的函數,不需要進行函數名聲明,它可以有很多個參數,但是只能有一個表達式。它和使用Python關鍵字def聲明的函數具有相似的功能。大多數情況下,lambda函數只作為參數傳遞給其他函數。
在本文中,我們講解了廣泛使用的lambda函數的語法,用例以及實例。
關於作者 Nicholas Samuel
我是一個專業的程序員。我非常喜歡Python,Java,數據科學和機器學習。如果你需要任何這些方面的幫助,就直接聯繫我吧,郵箱:nicholassamuel1107@gmail.com
英文原文:https://stackabuse.com/lambda-functions-in-python/ 譯者:野生大熊貓
※製作一個展示網站發展的Gif
※學習Python必知的Numpy函數
TAG:Python部落 |