Python Lambda函數:簡單函數的快速寫法
1. Lambda函數基礎
# 基本Lambda函數語法
square = lambda x: x ** 2
# 等同於以下普通函數
def square(x):
return x ** 2
# 使用Lambda函數
print(square(5)) # 輸出:25
# 多參數Lambda函數
add = lambda x, y: x + y
print(add(3, 4)) # 輸出:7
Lambda函數特點:
- 單行表達式
- 自動return結果
- 可以有多個參數
- 適合簡單運算
2. Lambda與內置函數配合
map()函數:
# 使用map轉換列表中的數字
numbers = [1, 2, 3, 4, 5]
squares = list(map(lambda x: x**2, numbers))
print(squares) # 輸出:[1, 4, 9, 16, 25]
# filter()函數:過濾數據
numbers = [1, 2, 3, 4, 5, 6]
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
print(even_numbers) # 輸出:[2, 4, 6]
# sorted()函數:自定義排序
students = [('Tom', 19), ('John', 20), ('Mary', 18)]
sorted_students = sorted(students, key=lambda x: x[1])
print(sorted_students) # 按年齡排序
3. 實際應用場景
# GUI事件處理
import tkinter as tk
window = tk.Tk()
button = tk.Button(window, text="點擊",
command=lambda: print("按鈕被點擊"))
# 列表處理
prices = [100, 200, 300, 400]
discounted = list(map(lambda x: x * 0.9, prices))
# 數據過濾
data = [{'name': 'Tom', 'age': 20},
{'name': 'John', 'age': 15},
{'name': 'Mary', 'age': 22}]
adults = list(filter(lambda x: x['age'] >= 18, data))
4. Lambda函數的限制
- 只能包含一個表達式
- 不能包含複雜的邏輯
- 不適合包含多行代碼
- 可讀性可能較差
練習題
-
使用Lambda函數創建一個計算兩數之積的函數
-
使用Lambda和filter()函數過濾出字符串列表中長度大於5的單詞
-
使用Lambda和sorted()函數對字典列表按特定鍵排序
進階應用
# 函數式編程
from functools import reduce
# 使用reduce計算總和
numbers = [1, 2, 3, 4, 5]
sum_result = reduce(lambda x, y: x + y, numbers)
# 組合多個Lambda函數
compose = lambda f, g: lambda x: f(g(x))
double = lambda x: x * 2
add_one = lambda x: x + 1
double_then_add = compose(add_one, double)
print(double_then_add(5)) # 11
常見錯誤和最佳實踐
注意事項:
- 避免在Lambda中寫複雜邏輯
- 適當使用普通函數替代Lambda
- 注意Lambda函數的可讀性
- 合理使用內置函數配合Lambda