摘要:今天我就和大家聊聊lambda函數,在Python編程中,大家習慣將其稱爲表達式。
本文分享自華爲雲社區《從零開始學python | 什麼是Lambda函數以及如何使用它們?》,原文作者:Yuchuan 。
名稱是用於引用或尋址任何實體的約定。我們周圍的幾乎所有事物都有名字。編程領域也與此一致。但這是必須命名的嗎?還是您可以擁有“匿名”商品?答案是肯定的。Python提供了Lambda函數,也稱爲匿名函數,實際上是無名的。因此,讓我們按以下順序繼續學習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函數?
當您只需要一次使用某些功能時,匿名功能的主要目的就會顯現出來。可以在任何需要的地方創建它們。由於這個原因,Python Lambda函數也稱爲拋出函數,與其他預定義函數(例如filter(),map()等)一起使用。與普通的python函數。
爲了證明這一點,讓我們繼續學習Python Lambda函數。
什麼是Python Lambda函數?
Python Lambda函數是沒有任何名稱的函數。它們也稱爲匿名或無名功能。“ lambda”一詞不是名稱,而是關鍵字。此關鍵字指定後面的函數是匿名的。
現在您已經知道這些匿名函數指的是什麼,讓我們進一步瞭解一下如何編寫這些Python Lambda函數。
如何用Python編寫Lambda函數?
使用lambda運算符創建Lambda函數,其語法如下:
句法:
lambda參數:表達式
Python lambda函數可以具有任意數量的參數,但只需要一個表達式。輸入或自變量可以從0開始,並可以達到任何限制。就像任何其他函數一樣,具有不帶輸入的lambda函數也很好。因此,您可以使用以下任何格式的lambda函數:
例子:
lambda:“指定目的”
在這裏,lambda函數不接受任何參數。
例子:
拉姆達一個1:“指定使用的1 “
在這裏,lambda接受一個輸入,即1。
同樣,您可以具有lambda a 1,a 2,a 3 ..a n。
讓我們舉幾個例子來證明這一點:
範例1:
a = lambda x: x*x
print(a(3))
輸出: 9
範例2:
a = lambda x,y: x*y
print(a(3,7))
輸出: 21
如您所見,我在這裏舉了兩個例子。第一個示例僅使用帶有一個表達式的lambda函數,而第二個示例具有傳遞給它的兩個參數。請注意,兩個函數都有一個表達式,後跟參數。因此,在需要多行表達式的地方不能使用lambda函數。
另一方面,普通的python函數可以在其函數定義中使用任意數量的語句。
匿名函數如何減少代碼的大小?
在比較所需的代碼量之前,讓我們首先寫下常規函數的語法,然後將其與前面所述的lambda函數的語法進行比較。
Python中的任何常規函數都是使用def關鍵字定義的,如下所示:
句法:
def function_name(parameters):
語句
如您所見,lambda函數所需的代碼量比普通函數少得多。
讓我們用現在的普通函數重寫前面的示例。
例子:
def my_func(x):
return x*x
print(my_func(3))
輸出: 9
如您所見,在上面的示例中,我們需要在my_func中使用return語句來計算3的平方值。相反,lambda函數不使用此return語句,而是使用匿名函數的主體在冒號後跟函數本身寫在同一行。因此,函數的大小小於my_func的大小。
但是,上述示例中的lambda函數是使用其他一些變量a調用的。這樣做是因爲這些函數是無名的,因此需要調用某些名稱。但是,當您需要實際分配其他名稱來調用它們時,爲什麼要使用這樣的無名函數,這一事實似乎令人困惑?當然,在爲我的函數分配名稱a之後,它不再不再是無名的了!正確的?
這是一個合理的問題,但重點是,這不是使用這些匿名函數的正確方法。
匿名函數最好在其他將函數用作參數或返回函數作爲輸出的其他高階函數中使用。爲了證明這一點,讓我們現在繼續進行下一個主題。
用戶定義函數中的Python Lambda函數:
如上文所述,lambda函數可在其他函數中使用,以標記出最大的優勢。
以下示例由new_func組成,這是一個帶有一個參數x的常規python函數。然後將此參數添加到通過lambda函數提供的未知參數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
如您所見,在上面的示例中,每當我們使用new_func()時,都會調用new_func中存在的lambda函數。每次,我們都可以將單獨的值傳遞給參數。
既然您已經瞭解瞭如何在高階函數中使用匿名函數,那麼讓我們繼續瞭解它的最流行用法之一是在filter(),map()和reduce()方法中。
如何在filter(),map()和reduce()中使用匿名函數:
filter()中的匿名函數:
篩選():
filter()方法用於在另一個作爲參數傳遞的函數的幫助下,過濾給定的iterables(列表,集合等),以測試所有元素爲真還是假。
該函數的語法爲:
句法:
過濾器(函數,可迭代)
現在考慮以下示例:
例子:
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是可迭代值的列表,該值傳遞給過濾器函數。此函數使用lambda函數檢查列表中是否有任何值(除以3後等於2)。輸出由滿足匿名函數中存在的表達式的列表組成。
地圖():
Python中的map()函數是將給定函數應用於所有可迭代對象並返回新列表的函數。
句法:
地圖(函數,可迭代)
讓我們以一個示例來演示lambda函數在map()函數中的用法:
例子:
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,False,True,True]
上面的輸出顯示,只要可迭代變量的值除以3,就不等於2,則返回的結果應爲True。因此,對於my_list中的所有元素,當條件更改爲False時,它將返回true(除了值6之外)。
減少():
reduce()函數用於將某些其他函數應用於作爲參數傳遞給它的元素列表,並最終返回單個值。
該函數的語法如下:
句法:
減少(功能,順序)
例子:
from functools import reduce
reduce(lambda a,b: a+b, [23,21,45,98])
下圖描述了上面的示例:
輸出: 187
輸出清楚地表明,列表的所有元素都被連續添加以返回最終結果。