python基礎(補充):lambda匿名函數


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]


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM