python基礎(補充):lambda匿名函式,用了的,都說好!

pure3417發表於2021-04-16

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]

相關文章