Python 中的 lambda 函數(shù)是一種簡潔的定義匿名函數(shù)的方式。lambda 函數(shù)可以接受任意數(shù)量的參數(shù),但只能有一個表達(dá)式。這個表達(dá)式的計算結(jié)果就是函數(shù)的返回值。由于 lambda 函數(shù)本質(zhì)上是一個表達(dá)式,它可以出現(xiàn)在 Python 語法允許表達(dá)式出現(xiàn)的任何地方。
基本語法
lambda 參數(shù)列表: 表達(dá)式
參數(shù)列表:與普通的函數(shù)定義類似,但不需要括號包圍。
表達(dá)式:這個表達(dá)式的結(jié)果會被返回。
示例
1. 簡單的 lambda 函數(shù)
square = lambda x: x * x print(square(4)) # 輸出: 16
這里定義了一個名為 square 的 lambda 函數(shù),它接受一個參數(shù) x 并返回 x 的平方。
2. 使用 lambda 函數(shù)作為參數(shù)
lambda 函數(shù)經(jīng)常作為參數(shù)傳遞給高階函數(shù)(接受函數(shù)作為參數(shù)或返回一個函數(shù)的函數(shù))。例如,在 filter() 函數(shù)中使用 lambda 來過濾列表:
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] filtered_numbers = filter(lambda x: x % 2 == 0, numbers) print(list(filtered_numbers)) # 輸出: [2, 4, 6, 8, 10]
這里,lambda 函數(shù)用于選擇列表中的偶數(shù)。
3. 在 map() 函數(shù)中使用 lambda
map() 函數(shù)對列表中的每個元素應(yīng)用一個函數(shù),并返回一個新的列表(在 Python 3 中,map() 返回的是一個迭代器,所以需要用 list() 轉(zhuǎn)換)。
numbers = [1, 2, 3, 4, 5] squared = map(lambda x: x * x, numbers) print(list(squared)) # 輸出: [1, 4, 9, 16, 25]
4. 在 sorted() 函數(shù)中使用 lambda
sorted() 函數(shù)可以對列表進(jìn)行排序,使用 lambda 函數(shù)可以自定義排序規(guī)則。
pairs = [(1, 'one'), (3, 'three'), (2, 'two'), (4, 'four')] pairs.sort(key=lambda pair: pair[1]) print(pairs) # 輸出: [(1, 'one'), (2, 'two'), (3, 'three'), (4, 'four')]
這里,lambda 函數(shù)用于根據(jù)元組的第二個元素進(jìn)行排序。
注意事項
lambda 函數(shù)主要用于定義簡單的、一次性的函數(shù)對象。
對于復(fù)雜的函數(shù),應(yīng)該使用標(biāo)準(zhǔn)的 def 語句來定義。
lambda 函數(shù)可以有多個參數(shù),但只能有一個表達(dá)式。
lambda 函數(shù)在需要函數(shù)對象的地方非常有用,比如作為參數(shù)傳遞給高階函數(shù)。