文章

第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 及何時使用常規函數。

任務

  1. 使用 Lambda 表達式創建一個簡單的計算平方值的函數,並計算 10 的平方。
  2. 使用 map() 和 Lambda 表達式將一組數字的立方(例如 [2, 3, 4])計算出來。
  3. 使用 filter() 和 Lambda 表達式從一組數字(例如 [1, 3, 4, 6, 7, 8])中篩選出所有奇數。
  4. 使用 sorted() 和 Lambda 表達式對一組包含人名和年齡的資料進行排序,從年紀大到小排列。
本文章以 CC BY 4.0 授權