CodeGym /課程 /Python SELF TW /匿名函數

匿名函數

Python SELF TW
等級 13 , 課堂 2
開放

2.1 定義匿名函數

匿名函數,也稱為無名函數,是 精簡的單行函數,沒有名稱, 可以用 lambda 關鍵字創建。

與用 def 定義的普通函數相比,匿名函數是即時創建的, 通常用於單行執行的簡單操作。

匿名函數的語法由 lambda 關鍵字、隨後的參數、冒號和 表達式組成:

 
lambda 參數: 表達式
    

匿名函數可以接受任意數量的參數,但僅能 包含一個表達式。該表達式的值會自動返回。

範例:

匿名函數 普通函數

square = lambda x: x ** 2
print(square(5))  # 輸出: 25
                    

def square(x):
    return x ** 2
print(square(5))  # 輸出: 25
                

sum = lambda a, b: a + b
            

def sum(a, b):
    return a + b
                

up = lambda s: s.upper()
            

def up(s):
    return s.upper()
                    

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 匿名函數的限制

相較於普通函數,匿名函數有一些限制:

限制於表達式:

匿名函數只能包含一個表達式,不能包括 復雜的操作,如循環或流程控制語句 (例如 ifelse 等)。

無文檔:

匿名函數不能包含文檔字符串 (docstring),這使得 說明其功能變得困難。

有限的除錯能力:

由於缺少名稱和文檔,匿名函數比普通函數更難除錯。

匿名函數限制範例

嘗試在匿名函數中使用多個表達式會導致語法錯誤:


# 這段代碼會引發錯誤
invalid_lambda = lambda x: x ** 2; print(x)
        
    
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION