什麼是lambda函數?
lambda函數,因其組成部分只有參數列表(argument_lsit),表達式(expression)二部分,也被稱爲匿名函數。
語法格式如下
lambda argument_list:expression
其中,argument_list的形式非常多,可以有以下幾種:
- a, b
- a=1, b=2
- *args
- **kwargs
- a, b=1, *args
- 空
expression是關於參數的一個表達式,表達式中出現的參數需要在argument_list中有定義,並且表達式只能是單行的,如下:
- 1
- None
- a + b
- sum(a)
- 1 if a >10 else 0
最簡單的示例:
t = lambda a, b: a + b # 將匿名函數傳給t變量 ressult = t(1,2) print(ressult) # 3
注意:
x = 6 s = lambda :x*x print(s()) # 36
如果上面等同於這種寫法
s = lambda x: x*x print(s(6))
使用場景
lambda的使用場景並不多,而且在我們平時學習階段也好,開發階段也好,很難用到,或者說能用的時候也想不起來。
個人認爲比較常見的場景有3種:
第一種:將lambda表達式賦給一個變量,例如上面的簡單示例
第二種:將lambda表達式當做函數的返回值,
第三種:當做參數傳遞給其他函數,這種用法比較典型的就是python中的filter,sorted,map等內置函數。(插一句,filter與map函數完全可以用推導式代替,而且更加簡單明瞭,龜叔一直想把這兩個函數捨棄- -。)
示例:
1、將能被3整除的元素過濾出來
filter(lambda x: x % 3 == 0, [1, 2, 3])
2、絕對值排序
print(sorted([1, 2, -3, 4, -5, 6, -7, 8, -9])) # [-9, -7, -5, -3, 1, 2, 4, 6, 8]
print(sorted([1, 2, -3, 4, -5, 6, -7, 8, -9], key=lambda x: abs(x))) # [1, 2, -3, 4, -5, 6, -7, 8, -9]
lambda作爲一個平時很不起眼,但關鍵時候能用到的技巧,還是值得我們花一點時間去學習,總結一下的。
尤其是在一些python開源項目的源碼中,用的很精巧。(我記得在看celery還是rabbitmq的源碼來着,主要是第一種,第二種用法)
本文爲原創,轉載請註明出處
時間:2019年7月24日22:01:55