深入理解 Python 中的 Lambda 表達式

Published October 9, 2024 by 徐培鈞
Python

在學習 Python 的過程中,你可能會聽到 Lambda 表達式 這個名詞。

Lambda 表達式是一種匿名函式,允許你在需要函式的地方快速定義一個簡短的函式。

對於新手來說,理解 Lambda 表達式可以讓你寫出更簡潔、更高效的代碼。

本文將為你詳細介紹 Python 中的 Lambda 表達式。


什麼是 Lambda 表達式?

Lambda 表達式,也稱為匿名函式,是一種沒有名稱的簡短函式。

它可以在一行代碼中定義,並立即使用。

Lambda 表達式主要用於需要簡單函式且不想正式定義一個函式的場合,特別是在需要將函式作為參數傳遞的情況下。


Lambda 表達式的語法

Lambda 表達式的基本語法如下:

lambda 參數列表: 表達式
  • lambda:關鍵字,表示這是一個 Lambda 表達式。
  • 參數列表:傳遞給函式的參數,可以有多個,用逗號分隔。
  • 表達式:一個表達式,計算後返回值。

示例

# 傳統函式定義
def add(x, y):
    return x + y

# 等價的 Lambda 表達式
add = lambda x, y: x + y

# 使用 Lambda 表達式
result = add(5, 3)
print(result)  # 輸出:8

Lambda 表達式的應用

與高階函式結合使用

Lambda 表達式常與高階函式一起使用,如 map()filter()sorted() 等。

使用 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]
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
print(even_numbers)  # 輸出:[2, 4]

使用 sorted()key 參數

students = [
    {'name': 'Alice', 'age': 25},
    {'name': 'Bob', 'age': 20},
    {'name': 'Charlie', 'age': 23}
]

# 根據年齡排序
sorted_students = sorted(students, key=lambda student: student['age'])
print(sorted_students)
# 輸出:
# [{'name': 'Bob', 'age': 20}, {'name': 'Charlie', 'age': 23}, {'name': 'Alice', 'age': 25}]

作為回調函式

Lambda 表達式可以用作回調函式,例如在 GUI 程式設計中。

import tkinter as tk

root = tk.Tk()
button = tk.Button(root, text='點我', command=lambda: print('按鈕被點擊'))
button.pack()
root.mainloop()

注意事項

  1. 僅限單一表達式:Lambda 表達式的主體只能包含一個表達式,不能包含多個語句或複雜的邏輯。
  2. 可讀性問題:過度使用 Lambda 表達式可能會降低代碼的可讀性。對於複雜的函式,建議使用普通的函式定義。
  3. 調試困難:由於 Lambda 表達式沒有名稱,當出現錯誤時,調試可能比較困難。

結論

Lambda 表達式是 Python 中強大且靈活的工具,適用於定義簡短的匿名函式。

通過理解和合理使用 Lambda 表達式,你可以使你的代碼更加簡潔和高效。

然而,應該注意不要過度使用,以免影響代碼的可讀性。


進一步學習

  • 高階函式:深入了解 map()filter()reduce() 等高階函式。
  • 函式式編程:探索 Python 中的函式式編程概念。
  • 裝飾器(Decorator):學習如何使用函式作為參數和返回值的高級用法。