1. 程式人生 > >Python語法基礎|高階用法|高階特性:匿名函式lambda

Python語法基礎|高階用法|高階特性:匿名函式lambda

定義一個普通函式,起碼需要def關鍵字+函式名+函式體。而lambda可定義一個匿名函式。

 

>>> add = lambda x,y:x+y
>>> type(add)
<type 'function'>

 

lambda,是Python的一個預留關鍵字。lambda,只是個表示式,起到一個函式速寫的作用。lambda的主體是一個表示式,而不是一個程式碼塊,可在lambda表示式中封裝有限的邏輯

 

lambda的語法是唯一的、固定的:lambda  agument_list:expression

,這就是一個函數了。

  • lambda,Python預留關鍵字;
  • argument_list,引數列表,與函式的引數列表是一樣的。如:a,b;a=1,b=2;*args;××kwargs;a,b=1,*args;空,等等;----這是輸入,即傳入到argument_list的值。
  • expression,一個關於引數的表示式,表示式中出現的引數都需要在argument_list中有定義,表示式必須是單行的。----這是輸出,即根據表示式expression計算得到的值。

 

lambda匿名函式的4個應用場景

1、將lambda函式賦值給一個變數,通過這個變數間接地呼叫該lambda函式

>>> add = lambda x,y:x+y
>>> add(1,2)
3

2、將lambda函式賦值給其他函式,從而將其他函式用該lambda函式替換

 

3、將lambda函式作為其他函式的返回值,返回給呼叫者。函式的返回值也可以是函式。這時,lambda函式就是內部函數了,可以訪問外部函式的區域性變數。

return lambda x:x+y

4、將lambda函式作為引數傳遞給其他函式。

有部分Python內建函式接收函式作為引數

  • filter():filter(lambda x:x%3==0
    , [1,2,3,4,5,6,7,8,9]),此時lambda函式作為過濾列表元素的條件,將列表中能否3整除的元素過濾出來。
>>> filter(lambda x:x%3==0, [1,2,3,4,5,6,7,8,9])
[3, 6, 9]
  • sorted():sorted([1,2,3,4,5,6,7,8,9], key=lambda x:abs(5-x)),此時lambda函式用於指定列表中所有元素進行排序的準則,將列表按照 元素跟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]
  • map():map(lambda x:x+1, [1,2,3]),此時lambda函式用於指定對列表中每一個元素所進行的共同操作,即將列表中的每一個元素加1。
>>> map(lambda x:x+1, [1,2,3])
[2, 3, 4]
>>> map(lambda x:True if x % 3 == 0 else False, range(10))
[True, False, False, True, False, False, True, False, False, True]
  • reduce():reduce(lambda a,b:'{},{}'.format(a,b), [1,2,3,4,5,6,7,8,9]),此時lambda函式用於指定列表中兩兩相鄰的元素的結合條件,即將列表中元素從左到右兩兩以逗號作為分隔的字元的形式依次結合起來。
>>> reduce(lambda a,b:'{},{}'.format(a,b), [1,2,3,4,5,6,7,8,9])
'1,2,3,4,5,6,7,8,9'

注意:lambda匿名函式 異常處理程式try...except