在進行編程時,一般我們會給一個函數或者變量起一個名字,該名稱是用於引用或尋址函數變量。但是有一個低調的函數,你不需要賦予它名字,因此該函數也叫匿名函數。該函數就是Python中的Lambda函數,下面就來為大家解析lambda函數的基本使用方法。
為什么要使用Python Lambda函數?
匿名函數可以在程序中任何需要的地方使用,但是這個函數只能使用一次,即一次性的。因此Python Lambda函數也稱為丟棄函數,它可以與其他預定義函數(如filter(),map()等)一起使用。相對於我們定義的可重復使用的函數來說,這個函數更加簡單便捷。
如何在Python中編寫Lambda函數?
Lambda函數是使用lambda運算符創建的,其語法如下:
語法: lambda參數:表達式
Python lambda函數可以包含任意多的參數,但它只有一個表達式。輸入或參數可以從0開始。就像任何其他函數一樣,lambda函數也可以是沒有輸入的。下面為大家舉個例子:假如我們計算一個數的平方,則程序為:
1 a = lambda x: x*x 2 print(a(3)
輸出結果為:9
相應的,如果我們要計算兩個數相乘,則:
a = lambda x,y: x*y print(a(3,7))
輸出結果為:21
在這兩個例子中,第一個示例lambda函數只使用一個表達式,而第二個示例有兩個參數。而且這兩個函數都有一個表達式后跟參數。因此有多種邏輯關系表達式的時候不能使用lambda函數。
匿名函數加速Python運行
在比較所需的代碼量之前,讓我們首先記下正常函數的語法,並將其與前面描述的lambda函數進行比較。Python中的任何普通函數都是使用def關鍵字定義的,具體語法如下所示:
def function_name(參數):
statement(s)
因此lambda函數所需的代碼量遠遠少於普通函數,也就是說使用Lambda可以精簡代碼,加速Python程序運行。讓我們舉個例子對比一下:
#——————————一般函數
def my_func(x): return x * x print(my_func(3)) #————————Lambda函數
a = lambda x,y: x*y print(a(3,7))
在上面的示例中,我們需要在my_func中使用return語句來計算3的平方值。相反,lambda函數不使用此return語句,因此Lambda函數計算的速度快於my_func函數。
Python Lambda函數的幾種使用方法
示例一:定義一個普通的python函數並嵌入Lambda,函數接收傳入的一個參數x。然后將此參數添加到lambda函數提供的某個未知參數y中求和。只要我們使用new_func(),就會調用new_func中存在的lambda函數。每次,我們都可以將不同的值傳遞給參數。
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
示例二:Lambda函數+filter函數
filter()方法用於根據一定的條件對給定的列表進行過濾。使用示例如下:
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是一個列表,它作為參數傳遞給filter函數。此函數使用lambda函數檢查列表中的值是否滿足除以3等於2的條件,輸出列表中滿足條件的值。
示例三:Lambda函數+map函數
Python中的map()函數是一個將給定的列表的值依次在所定義的函數關系中迭代並返回一個新列表。例如:
my_list = [2,3,4,5,6,7,8] new_list = list(map(lambda a:(a / 3!= 2),li)) print(new_list)
輸出結果為:[真,真,真,真,假,真,真]
示例四:Lambda函數+reduce函數
reduce() 函數會對參數序列中元素進行累積。使用示例如下:
from functools import reduce
reduce(lambda a,b:a + b,[23,21,45,98])
輸出結果為:187