lambda函式又叫做“匿名函式”。當你完成一件小工作時,直接使用該函式可以讓你的工作得心應手。
lambda函式介紹
在Python中,定義函式使用的是def關鍵字,但是通過lambda關鍵字來定義的函式,稱之為“匿名函式”。
函式的語法如下:
- lambda 引數:表示式
函式用法如下:
- ①先寫lambda關鍵字,②然後依次寫匿名函式的引數,多個引數之間用逗號連線,③接著是一個冒號,④冒號後面寫的是返回的表示式。
需要注意以下幾點:
- lambda函式能接收任意多個引數,但只能返回一個表示式的值;
- lambda函式是一個函式物件,如果直接賦值給一個變數,這個變數就成了一個函式物件;
當待處理的業務符合匿名函式的特點:多個引數和一個返回值,並且該函式只在一個地方使用,不在其他地方複用,建議使用lambda函式。
lambda函式的簡單使用
下面我們寫了帶有一個引數的匿名函式。
print(lambda x: x + 2)
# <function <lambda> at 0x000001CFE5851EA0>
接著,使用type()函式列印該函式的型別,得到的是一個function函式物件。
print(type(lambda x: x + 2))
# <class 'function'>
將匿名函式傳遞給一個引數,呼叫匿名函式。
注意:通過這種方式呼叫匿名函式,變數名+括號。
a = lambda x: x + 2
print(a(2))
# 4
lambda函式的不同形式
lambda函式中可以不傳引數,可以傳遞一個引數,二個引數,或者傳遞多個引數。
無引數的lambda函式
不管是有引數還是無引數,呼叫一定是變數名+括號,即這個括號不能省略,否則返回的是一個function函式物件。
In[1]:x1 = lambda: 88
print(x1())
# 88
單引數的lambda函式
單引數指的是匿名函式中只有一個引數,下面來看一個例子。
lambda x: x + 2
print(b(8))
# 10
多引數的lambda函式
多引數指的是匿名函式中有多個引數,下面來看一個例子。
c = lambda x, y: x * y
print(c(2, 5))
# 10
帶分支的lambda函式
有時候我們可以根據給定的引數,來判斷接下來需要做什麼,這就需要匿名函式結合分支表示式使用了。
d = lambda x: x - 1 if x > 5 else x + 1
print(d(9)) # 8
print(d(3)) # 4
lambda函式與Python內建函式配合使用
其實lambda函式還可以與sorted函式,map函式和filter函式,聯合使用。這裡以sorted函式為例進行舉例說明。
對列表裡的字典排序
l = [{'a': 1, 'b': 41}, {'a': 1111, 'b': 24}, {'a': 1111, 'b': 32}]
l_s = sorted(l, key=lambda x: x["b"], reverse=True)
print(l_s)
# [{'a': 1, 'b': 41}, {'a': 1111, 'b': 32}, {'a': 1111, 'b': 24}]
對字典進行key排序
m = {'a': 25, 'c': 27, 'b': 20, 'd': 22}
m_s = sorted(m.items(), key=lambda x: x[0])
print(m_s)
# [('a', 25), ('b', 20), ('c', 27), ('d', 22)]
對字典進行values排序
n = {'a': 25, 'c': 27, 'b': 20, 'd': 22}
n_s = sorted(n.items(), key=lambda x: x[1])
print(n_s)
# [('b', 20), ('d', 22), ('a', 25), ('c', 27)]
其它用法
print(list(map(lambda x: x * x, range(1, 11))))
# [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
print(list(filter(lambda x: x % 2 == 0, range(1, 11))))
# [2, 4, 6, 8, 10]