從零開始學(xué)python | 什么是Lambda函數(shù)以及如何使用它們?
名稱是用于引用或?qū)ぶ啡魏螌?shí)體的約定。我們周圍的幾乎所有事物都有名字。編程領(lǐng)域也與此一致。但這是必須命名的嗎?還是您可以擁有“匿名”商品?答案是肯定的。Python提供了Lambda函數(shù),也稱為匿名函數(shù),實(shí)際上是無名的。因此,讓我們按以下順序繼續(xù)學(xué)習(xí)Python的這些“匿名之謎”。
Why are Python Lambda Functions required?
What are Python Lambda Functions?
How to write Lambda Functions?
How do Anonymous functions reduce the size of the code?
Python Lambda functions within user defined functions
How to use Anonymous functions within:
filter()
map()
reduce()
因此,讓我們開始:)
為什么要使用Python Lambda函數(shù)?
當(dāng)您只需要一次使用某些功能時(shí),匿名功能的主要目的就會(huì)顯現(xiàn)出來。可以在任何需要的地方創(chuàng)建它們。由于這個(gè)原因,Python Lambda函數(shù)也稱為拋出函數(shù),與其他預(yù)定義函數(shù)(例如filter(),map()等)一起使用。與普通的python函數(shù)。
為了證明這一點(diǎn),讓我們繼續(xù)學(xué)習(xí)Python Lambda函數(shù)。
什么是Python Lambda函數(shù)?
Python Lambda函數(shù)是沒有任何名稱的函數(shù)。它們也稱為匿名或無名功能。“ lambda”一詞不是名稱,而是關(guān)鍵字。此關(guān)鍵字指定后面的函數(shù)是匿名的。
現(xiàn)在您已經(jīng)知道這些匿名函數(shù)指的是什么,讓我們進(jìn)一步了解一下如何編寫這些Python Lambda函數(shù)。
如何用Python編寫Lambda函數(shù)?
使用lambda運(yùn)算符創(chuàng)建Lambda函數(shù),其語法如下:
句法:
lambda參數(shù):表達(dá)式
Python?lambda函數(shù)可以具有任意數(shù)量的參數(shù),但只需要一個(gè)表達(dá)式。輸入或自變量可以從0開始,并可以達(dá)到任何限制。就像任何其他函數(shù)一樣,具有不帶輸入的lambda函數(shù)也很好。因此,您可以使用以下任何格式的lambda函數(shù):
例子:
lambda:“指定目的”
在這里,lambda函數(shù)不接受任何參數(shù)。
例子:
拉姆達(dá)一個(gè)1:“指定使用的1?“
在這里,lambda接受一個(gè)輸入,即1。
同樣,您可以具有l(wèi)ambda a?1,a?2,a?3?..a?n。
讓我們舉幾個(gè)例子來證明這一點(diǎn):
范例1:
a = lambda x: x*x print(a(3))
輸出:?9
范例2:
a = lambda x,y: x*y print(a(3,7))
輸出:??21
如您所見,我在這里舉了兩個(gè)例子。第一個(gè)示例僅使用帶有一個(gè)表達(dá)式的lambda函數(shù),而第二個(gè)示例具有傳遞給它的兩個(gè)參數(shù)。請(qǐng)注意,兩個(gè)函數(shù)都有一個(gè)表達(dá)式,后跟參數(shù)。因此,在需要多行表達(dá)式的地方不能使用lambda函數(shù)。
另一方面,普通的python函數(shù)可以在其函數(shù)定義中使用任意數(shù)量的語句。
匿名函數(shù)如何減少代碼的大小?
在比較所需的代碼量之前,讓我們首先寫下常規(guī)函數(shù)的語法,然后將其與前面所述的lambda函數(shù)的語法進(jìn)行比較。
Python中的任何常規(guī)函數(shù)都是使用def關(guān)鍵字定義的,如下所示:
句法:
def function_name(parameters):
語句
如您所見,lambda函數(shù)所需的代碼量比普通函數(shù)少得多。
讓我們用現(xiàn)在的普通函數(shù)重寫前面的示例。
例子:
def my_func(x): return x*x print(my_func(3))
輸出:??9
如您所見,在上面的示例中,我們需要在my_func中使用return語句來計(jì)算3的平方值。相反,lambda函數(shù)不使用此return語句,而是使用匿名函數(shù)的主體在冒號(hào)后跟函數(shù)本身寫在同一行。因此,函數(shù)的大小小于my_func的大小。
但是,上述示例中的lambda函數(shù)是使用其他一些變量a調(diào)用的。這樣做是因?yàn)檫@些函數(shù)是無名的,因此需要調(diào)用某些名稱。但是,當(dāng)您需要實(shí)際分配其他名稱來調(diào)用它們時(shí),為什么要使用這樣的無名函數(shù),這一事實(shí)似乎令人困惑?當(dāng)然,在為我的函數(shù)分配名稱a之后,它不再不再是無名的了!正確的?
這是一個(gè)合理的問題,但重點(diǎn)是,這不是使用這些匿名函數(shù)的正確方法。
匿名函數(shù)最好在其他將函數(shù)用作參數(shù)或返回函數(shù)作為輸出的其他高階函數(shù)中使用。為了證明這一點(diǎn),讓我們現(xiàn)在繼續(xù)進(jìn)行下一個(gè)主題。
用戶定義函數(shù)中的Python Lambda函數(shù):
如上文所述,lambda函數(shù)可在其他函數(shù)中使用,以標(biāo)記出最大的優(yōu)勢(shì)。
以下示例由new_func組成,這是一個(gè)帶有一個(gè)參數(shù)x的常規(guī)python函數(shù)。然后將此參數(shù)添加到通過lambda函數(shù)提供的未知參數(shù)y中。
例子:
def new_func(x): return(lambda y: x+y) t=new_func(3) u=new_func(2) print(t(3)) print(u(3))
輸出:
6
5
如您所見,在上面的示例中,每當(dāng)我們使用new_func()時(shí),都會(huì)調(diào)用new_func中存在的lambda函數(shù)。每次,我們都可以將單獨(dú)的值傳遞給參數(shù)。
既然您已經(jīng)了解了如何在高階函數(shù)中使用匿名函數(shù),那么讓我們繼續(xù)了解它的最流行用法之一是在filter(),map()和reduce()方法中。
如何在filter(),map()和reduce()中使用匿名函數(shù):
filter()中的匿名函數(shù):
篩選():
filter()方法用于在另一個(gè)作為參數(shù)傳遞的函數(shù)的幫助下,過濾給定的iterables(列表,集合等),以測(cè)試所有元素為真還是假。
該函數(shù)的語法為:
句法:
過濾器(函數(shù),可迭代)
現(xiàn)在考慮以下示例:
例子:
my_list = [2,3,4,5,6,7,8] new_list = list(filter(lambda a: (a/3 == 2), my_list)) print(new_list)
輸出:??[6]
在這里,my_list是可迭代值的列表,該值傳遞給過濾器函數(shù)。此函數(shù)使用lambda函數(shù)檢查列表中是否有任何值(除以3后等于2)。輸出由滿足匿名函數(shù)中存在的表達(dá)式的列表組成。
地圖():
Python中的map()函數(shù)是將給定函數(shù)應(yīng)用于所有可迭代對(duì)象并返回新列表的函數(shù)。
句法:
地圖(函數(shù),可迭代)
讓我們以一個(gè)示例來演示lambda函數(shù)在map()函數(shù)中的用法:
例子:
my_list = [2,3,4,5,6,7,8] new_list = list(map(lambda a: (a/3 != 2), li)) print(new_list)
輸出:
[True,True,True,True,F(xiàn)alse,True,True]
上面的輸出顯示,只要可迭代變量的值除以3,就不等于2,則返回的結(jié)果應(yīng)為True。因此,對(duì)于my_list中的所有元素,當(dāng)條件更改為False時(shí),它將返回true(除了值6之外)。
減少():
reduce()函數(shù)用于將某些其他函數(shù)應(yīng)用于作為參數(shù)傳遞給它的元素列表,并最終返回單個(gè)值。
該函數(shù)的語法如下:
句法:
減少(功能,順序)
例子:
from functools import reduce reduce(lambda a,b: a+b, [23,21,45,98])
下圖描述了上面的示例:
輸出:?187
輸出清楚地表明,列表的所有元素都被連續(xù)添加以返回最終結(jié)果。
至此,我們結(jié)束了有關(guān)“ Python Lambda”的本文。希望您對(duì)與您共享的所有內(nèi)容一清二楚。?確保盡可能多地練習(xí)并恢復(fù)經(jīng)驗(yàn)。
Python
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。