目錄
前言
1? 基本知識點
語法
特點
代碼示例
2? 常見使用場景
1.? 與高階函數配合使用
2.? 作為排序鍵來使用
3.? 立即調用函數
4.? 在字典中使用
3? 高級用法(進階版)
1.? 多參數lambda
2.? 設置默認參數
3.? 嵌套lambda
注意事項
何時使用lambda
何時避免使用lambda
小結
前言
????????Lambda函數是Python中的一種匿名函數,本質上還是一個函數,它可以用一行代碼定義一個簡單的函數,而不需要使用def
關鍵字。
1? 基本知識點
語法
lambda arguments: expression
-
lambda
:定義lambda函數的關鍵字 -
arguments
:函數的參數,可以有多個,參數之間用逗號分隔 -
expression
:函數的返回值表達式,只能有一個表達式
特點
-
匿名函數:沒有函數名
-
自動返回返回值:不需要用
return
語句,會自動返回表達式的結果 -
簡潔:通常用于簡單操作,可以替代小型函數
-
單行表達式:只能包含一個表達式,不能包含復雜的邏輯或多條語句
-
可以作為參數傳遞:常用于高階函數,如
map()
,?filter()
,?reduce()
等
代碼示例
# 普通函數定義
def add(x, y):return x + y# 等效的lambda函數
add_lambda = lambda x, y: x + y# 測試
print(add(3, 5)) # 輸出: 8
print(add_lambda(3, 5)) # 輸出: 8
2? 常見使用場景
1.? 與高階函數配合使用
# 使用map()和lambda將列表中的每個元素平方
numbers = [1, 2, 3, 4, 5]
squared = list(map(lambda x: x**2, numbers))
print(squared) # 輸出: [1, 4, 9, 16, 25]# 使用filter()和lambda篩選偶數
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
print(even_numbers) # 輸出: [2, 4]
map()和filter()內置函數的使用方法見其他文章(pass:作者暫未發布,后續會發布詳解)
2.? 作為排序鍵來使用
# 按元組的第二個元素排序
pairs = [(1, 'one'), (2, 'two'), (3, 'three'), (4, 'four')]
pairs.sort(key=lambda pair: pair[1])
print(pairs) # 輸出: [(4, 'four'), (1, 'one'), (3, 'three'), (2, 'two')]# 按字符串長度排序
fruits = ['apple', 'banana', 'cherry', 'date']
fruits_sorted = sorted(fruits, key=lambda x: len(x))
print(fruits_sorted) # 輸出: ['date', 'apple', 'banana', 'cherry']
3.? 立即調用函數
# 定義并立即調用lambda函數
result = (lambda x, y: x * y)(5, 3)
print(result) # 輸出: 15
4.? 在字典中使用
# 使用lambda作為字典值實現簡單計算器
operations = {'add': lambda x, y: x + y,'subtract': lambda x, y: x - y,'multiply': lambda x, y: x * y,'divide': lambda x, y: x / y
}print(operations['add'](10, 5)) # 輸出: 15
print(operations['multiply'](10, 5)) # 輸出: 50
說明:字典的值可以是任意類型,包括函數。
3? 高級用法(進階版)
1.? 多參數lambda
# 多個參數的lambda函數
full_name = lambda first, last: f"{first} {last}"
print(full_name('John', 'Doe')) # 輸出: John Doe
2.? 設置默認參數
# 帶默認參數的lambda
greet = lambda name, greeting='Hello': f"{greeting}, {name}!"
print(greet('Alice')) # 輸出: Hello, Alice!
print(greet('Bob', 'Hi')) # 輸出: Hi, Bob!
3.? 嵌套lambda
# 嵌套lambda函數
multiplier = lambda x: (lambda y: x * y)
times3 = multiplier(3)
print(times3(5)) # 輸出: 15
注意事項
-
可讀性:過度使用lambda會降低代碼可讀性,復雜的邏輯應該使用普通函數
-
調試:lambda函數沒有函數名,調試時可能更難追蹤
-
限制:lambda只能包含一個表達式,不能包含語句或注解
何時使用lambda
-
函數邏輯非常簡單
-
函數只在一個地方使用
-
作為參數傳遞給高階函數
-
需要短小的回調函數
何時避免使用lambda
-
函數邏輯復雜
-
函數需要重用
-
需要文檔字符串或類型注解
-
函數需要多個語句
小結
????????Lambda函數是Python中一個強大的工具,特別適合與高階函數配合使用或需要短小匿名函數的場景。雖然它簡潔高效,但應該適度使用以保持代碼的可讀性和可維護性。
如果您覺得本文章對您有幫助,別忘了點贊、收藏加關注,更多干貨內容將持續發布,您的支持就是作者更新最大的動力。本專欄將持續更新,有任何問題都可以在評論區討論