Python--lambda函數

什麼是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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章