2.1 定義匿名函數
匿名函數,也稱為無名函數,是 精簡的單行函數,沒有名稱, 可以用 lambda 關鍵字創建。
與用 def 定義的普通函數相比,匿名函數是即時創建的, 通常用於單行執行的簡單操作。
匿名函數的語法由 lambda 關鍵字、隨後的參數、冒號和 表達式組成:
lambda 參數: 表達式
匿名函數可以接受任意數量的參數,但僅能 包含一個表達式。該表達式的值會自動返回。
範例:
| 匿名函數 | 普通函數 |
|---|---|
|
|
|
|
|
|
2.2 匿名函數的應用
匿名函數經常與其他函數結合使用, 例如 map()、filter() 和 sorted(),也可以作為其他函數的參數。
與 map() 的結合使用
map() 函數將指定的函數應用於每個元素 的可迭代對象,並返回結果的迭代器。 由於匿名函數可以簡潔地定義轉換元素的函數, 因此非常適合與 map() 一起使用。
numbers = [1, 2, 3, 4, 5]
squared_numbers = list(map(lambda x: x ** 2, numbers))
print(squared_numbers) # 輸出: [1, 4, 9, 16, 25]
與 filter() 的結合使用
filter() 函數返回一個由可迭代對象中元素組成的迭代器,這些元素的條件由指定函數返回 True 定義。 匿名函數允許快速定義過濾條件。
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]
與 sorted() 的結合使用
sorted() 函數對可迭代對象的元素進行排序。 匿名函數可用於通過 key 參數定義自定義排序準則。
words = ["banana", "apple", "cherry", "date"]
sorted_words = sorted(words, key=lambda x: len(x))
print(sorted_words) # 輸出: ['date', 'apple', 'banana', 'cherry']
在表達式中使用匿名函數
匿名函數可以用於其他表達式中,例如 列表生成式和字典生成。
pairs = [(1, 'one'), (2, 'two'), (3, 'three'), (4, 'four')]
pairs.sort(key=lambda pair: pair[1])
print(pairs) # 輸出: [(4, 'four'), (1, 'one'), (3, 'three'), (2, 'two')]
2.3 匿名函數的限制
相較於普通函數,匿名函數有一些限制:
限制於表達式:
匿名函數只能包含一個表達式,不能包括 復雜的操作,如循環或流程控制語句 (例如 if、else 等)。
無文檔:
匿名函數不能包含文檔字符串 (docstring),這使得 說明其功能變得困難。
有限的除錯能力:
由於缺少名稱和文檔,匿名函數比普通函數更難除錯。
匿名函數限制範例
嘗試在匿名函數中使用多個表達式會導致語法錯誤:
# 這段代碼會引發錯誤
invalid_lambda = lambda x: x ** 2; print(x)
GO TO FULL VERSION