第22天:Lambda 表達式
課程簡介
Lambda 表達式是 Python 中用於創建匿名函數的方式。Lambda 表達式主要用於實現簡單的邏輯操作,省略傳統函數的定義格式,使程式碼更為簡潔。Lambda 表達式尤其適合用於需要快速定義簡單函數的情況,例如作為參數傳入其他函數時。在今天的課程中,我們將了解如何使用 Lambda 表達式、它的語法,以及在不同場景中的應用。
學習內容
1. Lambda 表達式的語法
Lambda 表達式的基本語法如下:
1
lambda 參數1, 參數2, ... : 表達式
它的工作原理是將參數傳入,然後執行冒號後面的單行表達式。Lambda 表達式的特點是返回結果,而不需要明確使用 return
。
範例:
1
2
add = lambda x, y: x + y
print(add(5, 3)) # 輸出: 8
這裡,add
是一個 Lambda 表達式,用來計算兩個數字的和。
2. Lambda 表達式與常規函數的比較
Lambda 表達式適用於簡單的操作,而複雜邏輯更適合用常規函數定義。
常規函數範例:
1
2
def multiply(x, y):
return x * y
Lambda 表達式範例:
1
multiply = lambda x, y: x * y
這兩者在功能上是等效的,但 Lambda 表達式更加簡潔,不適合複雜的邏輯運算。
3. Lambda 表達式的應用場景
Lambda 表達式通常作為參數傳遞給其他函數,如 map()
、filter()
和 sorted()
。
3.1 使用 Lambda 與 map()
函數
map()
函數可以將一個函數應用到序列中的每一個元素。
範例:
1
2
3
numbers = [1, 2, 3, 4]
squared = map(lambda x: x ** 2, numbers)
print(list(squared)) # 輸出: [1, 4, 9, 16]
3.2 使用 Lambda 與 filter()
函數
filter()
函數可以篩選出符合條件的元素。
範例:
1
2
3
numbers = [1, 2, 3, 4, 5, 6]
even_numbers = filter(lambda x: x % 2 == 0, numbers)
print(list(even_numbers)) # 輸出: [2, 4, 6]
3.3 使用 Lambda 與 sorted()
函數
sorted()
函數可以接受 Lambda 表達式作為排序鍵(key),自訂排序方式。
範例:
1
2
3
4
students = [('Alice', 85), ('Bob', 75), ('Charlie', 90)]
sorted_students = sorted(students, key=lambda x: x[1], reverse=True)
print(sorted_students)
# 輸出: [('Charlie', 90), ('Alice', 85), ('Bob', 75)]
4. Lambda 表達式的限制
- Lambda 表達式僅限於單行表達式,無法包含多行的邏輯。
- 只能包含簡單的操作,複雜的程式邏輯應使用常規函數。
- 雖然可以被賦值給變數,但為了可讀性,Lambda 常用於短期計算場景中。
教學重點
- Lambda 表達式的語法:理解如何使用 Lambda 表達式來創建簡單函數。
- Lambda 表達式的應用場景:學會在
map()
、filter()
和sorted()
等函數中使用 Lambda 表達式。 - Lambda 與常規函數的比較:理解 Lambda 表達式的優缺點,知道何時應使用 Lambda 及何時使用常規函數。
任務
- 使用 Lambda 表達式創建一個簡單的計算平方值的函數,並計算
10
的平方。 - 使用
map()
和 Lambda 表達式將一組數字的立方(例如[2, 3, 4]
)計算出來。 - 使用
filter()
和 Lambda 表達式從一組數字(例如[1, 3, 4, 6, 7, 8]
)中篩選出所有奇數。 - 使用
sorted()
和 Lambda 表達式對一組包含人名和年齡的資料進行排序,從年紀大到小排列。
本文章以 CC BY 4.0 授權