Python中的`lambda`函數,或者叫匿名函數,是一個極其強大的工具。它以簡潔、優雅的語法提供了創建函數的快速方式。在本篇文章中,我們將全方位地深入研究lambda函數的用法和特點,通過理論和實例相結合的方式,讓你的Python編程技巧更上一層樓。 ...
Python中的lambda
函數,或者叫匿名函數,是一個極其強大的工具。它以簡潔、優雅的語法提供了創建函數的快速方式。在本篇文章中,我們將全方位地深入研究lambda函數的用法和特點,通過理論和實例相結合的方式,讓你的Python編程技巧更上一層樓。
Lambda函數基本語法
Lambda函數的基本語法形式是 lambda 參數: 表達式
。這裡我們可以看到,lambda函數並不需要函數名,也就是我們所說的“匿名”的含義。這使得我們可以在代碼的任何地方快速定義一個函數。下麵的代碼展示瞭如何使用lambda函數。
add = lambda x, y: x + y
print(add(5, 3)) # 輸出: 8
在這個示例中,我們創建了一個簡單的加法函數。然而,與使用def
關鍵字定義函數不同,我們沒有為函數指定名稱,也就是匿名的含義。
Lambda函數與高階函數
高階函數是指那些接受函數作為參數或返回函數作為輸出的函數。在Python中,常見的高階函數有map()
、filter()
、reduce()
等。lambda函數經常和這些高階函數一起使用,達到簡潔明瞭的效果。
比如下麵這個例子,我們使用map()
函數和lambda函數,快速實現了一個將列表中所有元素翻倍的操作:
numbers = [1, 2, 3, 4, 5]
doubled = map(lambda x: x * 2, numbers)
print(list(doubled)) # 輸出: [2, 4, 6, 8, 10]
在這個示例中,我們用lambda函數快速地定義了一個函數,將數字乘以2,然後使用map()
函數應用到列表中的每一個元素。
在條件過濾中使用Lambda函數
filter()
函數是Python的另一個常見高階函數,它接受一個函數和一個可迭代對象作為參數,並返回一個新的可迭代對象,新的可迭代對象中的元素都是原可迭代對象中使得函數返回值為True的元素。下麵我們來看一個使用filter()
函數和lambda函數的例子:
numbers = [1, 2, 3, 4, 5, 6]
even_numbers = filter(lambda x: x % 2 == 0, numbers)
print(list(even_numbers)) # 輸出: [2, 4, 6]
在這個例子中,我們使用lambda函數定義了一個判斷一個數字是否是偶數的函數,並用filter()
函數應用到了列表中的每一個元素,最後得到了一個新的只包含偶數的列表
。
Lambda函數在排序中的應用
在Python的sort()
或sorted()
函數中,我們可以用lambda函數作為key參數,根據自定義的規則進行排序。
fruits = ['banana', 'apple', 'cherry', 'lime', 'mango']
fruits_sorted = sorted(fruits, key=lambda x: len(x))
print(fruits_sorted) # 輸出: ['lime', 'apple', 'mango', 'cherry', 'banana']
在這個示例中,我們用一個lambda函數來指定根據字元串的長度進行排序,而不是預設的字母順序。這個特性非常有用,比如在排序一組字典時,我們可能希望根據字典中的某個特定的鍵的值進行排序,這時候,lambda函數就可以派上大用場了。
One More Thing: Lambda函數與閉包
在這裡,我想分享一個可能鮮為人知,但是非常有用的lambda函數的技巧,就是如何使用lambda函數創建一種特殊的閉包。
def multiplier(n):
return lambda x: x * n
double = multiplier(2)
triple = multiplier(3)
print(double(4)) # 輸出: 8
print(triple(4)) # 輸出: 12
在這個示例中,我們定義了一個返回lambda函數的函數。返回的lambda函數會記住它在定義時的環境,這就是所謂的閉包(Closure)。通過這種方式,我們可以創建各種有特定乘數的乘法函數。
總結,Python的lambda函數提供了一種簡潔優雅的方式來定義函數,特別適合於定義簡單的、一次性使用的函數。希望這篇文章能幫助你更好地理解和使用Python的lambda函數。
如有幫助,請多關註
個人微信公眾號:【Python全視角】
TeahLead_KrisChang,10+年的互聯網和人工智慧從業經驗,10年+技術和業務團隊管理經驗,同濟軟體工程本科,復旦工程管理碩士,阿裡雲認證雲服務資深架構師,上億營收AI產品業務負責人。