目錄
引言
一、簡介
1.1 基本語法
1.2 優勢
1.3 局限性
二、基本用法
2.1 無參數lambda 函數
2.2 多參數 lambda 函數
三、常見使用場景
3.1 與高階函數配合使用
3.2 作為排序鍵
3.3 在 GUI 編程中作為回調函數
3.4?在 Pandas 中的應用
四、高級技巧
4.1 條件表達式
4.2 嵌套 Lambda 函數
4.3 默認參數
總結
引言
????????Python 中的 lambda
函數是一種創建匿名函數(沒有名稱的函數)的方式,它可以使代碼更加簡潔和易讀。雖然功能有限,但在適當的場景下,lambda 函數能大大簡化代碼結構。
一、簡介
1.1 基本語法
Lambda 函數是使用 lambda
關鍵字創建的匿名函數,其基本語法如下:
lambda arg1, arg2 : expression
參數:
lambda
:定義 lambda 函數的關鍵字
arg
:函數參數,可以是零個或多個,用逗號分隔
expression
:函數體,只能是一個表達式,不能包含多條語句
1.2 Lambda 函數的優勢
-
當函數只需要使用一次時
-
當函數體非常簡單,只有一條表達式時
-
作為參數傳遞給高階函數時
1.3 Lambda 函數的局限性
-
只能包含一個表達式:Lambda 函數不能包含多條語句或復雜的邏輯結構。
-
沒有語句:不能包含
if
、for
、while
等語句(但可以使用條件表達式)。 -
可讀性:過于復雜的 lambda 函數會降低代碼的可讀性。
二、基本用法
2.1 無參數的 lambda 函數
# 普通函數定義
def square(x):print("hello world!")
?
# 等效的 lambda 函數
square = lambda : print("hello world!")
2.2 多參數的 lambda 函數
# 普通函數
def add(x, y):return x + y
?
# 等效的 lambda 函數
add = lambda x, y: x + y
?
print(add(3, 5)) # 輸出: 8
三、常見使用場景
3.1 與高階函數配合使用
Lambda 函數經常與 map()
, filter()
, reduce()
等高階函數一起使用。
- 使用
map()
numbers = [1, 2, 3, 4, 5]
squared = list(map(lambda x: x ** 2, numbers))
print(squared) # 輸出: [1, 4, 9, 16, 25]
- 使用
filter()
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
print(even_numbers) # 輸出: [2, 4, 6, 8, 10]
- 使用
reduce()
from functools import reduce
numbers = [1, 2, 3, 4, 5]
product = reduce(lambda x, y: x * y, numbers)
print(product) # 輸出: 120
3.2 作為排序鍵
# 按姓名排序
students = [{'name': 'Alice', 'age': 25},{'name': 'Bob', 'age': 22},{'name': 'Charlie', 'age': 28}
]
?
# 按姓名排序
students_sorted_by_name = sorted(students, key=lambda x: x['name'])
print(students_sorted_by_name)
# 輸出: [{'name': 'Alice', 'age': 25}, {'name': 'Bob', 'age': 22}, {'name': 'Charlie', 'age': 28}]
?
# 按年齡排序
students_sorted_by_age = sorted(students, key=lambda x: x['age'])
print(students_sorted_by_age)
# 輸出: [{'name': 'Bob', 'age': 22}, {'name': 'Alice', 'age': 25}, {'name': 'Charlie', 'age': 28}]
3.3 在 GUI 編程中作為回調函數
import tkinter as tk
?
root = tk.Tk()
button = tk.Button(root, text="Click me!", command=lambda: print("Button clicked!"))
button.pack()
root.mainloop()
3.4?在 Pandas 中的應用
import pandas as pd
?
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
# 創建新列,其值為 A 列和 B 列的和
df['C'] = df.apply(lambda row: row['A'] + row['B'], axis=1)
print(df)
四、高級技巧
4.1 條件表達式
# 返回兩個數中較大的數
max_value = lambda x, y: x if x > y else y
print(max_value(10, 20)) # 輸出: 20
4.2 嵌套 Lambda 函數
# 返回一個函數,該函數計算 x 的 n 次方
power = lambda n: lambda x: x ** n
?
square = power(2)
cube = power(3)
?
print(square(4)) # 輸出: 16
print(cube(3)) ? # 輸出: 27
4.3 默認參數
greet = lambda name, greeting="Hello": f"{greeting}, {name}!"
print(greet("Alice")) ? ? ? ? # 輸出: Hello, Alice!
print(greet("Bob", "Hi")) ? ? # 輸出: Hi, Bob!
總結
????????Lambda 函數是 Python 中一個強大而簡潔的特性,當正確使用時,可以使代碼更加簡潔和易讀。它們特別適合與高階函數配合使用,或者作為簡單的回調函數。
????????然而,重要的是要記住,lambda 函數并不總是最佳選擇,特別是當邏輯變得復雜時。如在這些情況下,使用傳統的 def
關鍵字定義函數通常是更好的選擇:
-
當函數邏輯復雜,需要多條語句時
-
當函數需要文檔字符串或注釋時
-
當函數會被多次重用時
選擇使代碼最清晰、最易維護的方法,而不是一味追求簡潔。