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函數對象。
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]