Python lambda表達式
一.lambda基本概念
python中,lambda函數也叫匿名函數,即沒有具體名稱的函數,它允許快速定義單行函數,類似c語言的宏,可以用在任何需要函數的地方。用匿名函數有一個好處,因為函數沒有名字,不必擔心函數名沖突。匿名函數也是一個函數對象,也可以把**匿名函數賦值給一個變量,**在利用變量來調用該函數
實例:
f=lambda x:x*x
f(5)=25
同樣,也可以把匿名函數作為返回值返回,比如:
def f(x,y):
return lambda x*x+x*y
二.lambda與def區別
- def創建的方法是有名稱的,而lambda沒有
- lambda會返回一個函數對象,但這個對象不會賦給一個標識符,而def則會把函數對象賦值給一個變量(函數名)
- lambda只是一個表達式,而def是一個語句
- lambda表達式":"后面只能有一個表達式,def則可以有多個
三.例子說明
python中有一個定義好的全局函數方便調用:filter,map,functools.reduce
>>> foo = [2, 18, 9, 22, 17, 24, 8, 12, 27]
>>> filter(lambda x: x % 3 == 0, foo)
<filter object at 0x0000025834193E08>
>>> list(filter(lambda x: x % 3 == 0, foo))
[18, 9, 24, 12, 27]
>>> list(map(lambda x:x%2+10,foo))
[10, 10, 11, 10, 11, 10, 10, 10, 11]
>>> functools.reduce(lambda x,y:x+y,foo)
139
定義某種排序規則
將列表[1, 2, 3, 4, 5, 6, 7, 8, 9]按照元素與5距離從小到大進行排序
>>> sorted([1, 2, 3, 4, 5, 6, 7, 8, 9], key=lambda x: abs(5-x))
[5, 4, 6, 3, 7, 2, 8, 1, 9]