“Lambda 表達式”(lambda expression)是一個匿名函數,Lambda表達式基於數學中的λ演算得名,直接對應於其中的lambda抽象(lambda abstraction),是一個匿名函數,即沒有函數名的函數。Lambda表達式可以表示閉包。
lambda所表示的匿名函數的內容應該是很簡單的,如果複雜的話,就重新定義一個函數吧。
兩種使用場景:
應用在函數式編程中
Python提供了很多函數式編程的特性,如:map、reduce、filter、sorted等這些函數都支持函數作爲參數,lambda函數就可以應用在函數式編程中。如下:
# 需求:將列表中的元素按照絕對值大小進行升序排列 list1 = [3,5,-4,-1,0,-2,-6] sorted(list1, key=lambda x: abs(x))
當然,也可以如下:
list1 = [3,5,-4,-1,0,-2,-6] def get_abs(x): return abs(x) sorted(list1,key=get_abs)
只不過這種方式的代碼看起來不夠Pythonic(一種python代碼標準)——具體可學習書籍——編寫高質量代碼:改善python程序的91個建議
應用在閉包中
def get_y(a,b): return lambda x:ax+b y1 = get_y(1,1) y1(1) # 結果爲2
當然,也可以用常規函數實現閉包,如下:
def get_y(a,b): def func(x): return ax+b return func y1 = get_y(1,1) y1(1) # 結果爲2
Python之禪中有這麼一句話:Explicit is better than implicit(明瞭勝於晦澀),一切以保證好的可讀性爲