什么是lambda函數


匿名函數lambda:指一類無需定義的標識符(函數名)的函數或子程序。lambda函數可以接收任意多個參數(包括可選參數)並且返回單個表達式的值。

example:

In [36]: p = lambda x, y: x *y         lambda 后面x,y是參數 ,:號后面的是表達式, p相當於接受匿名函數的返回值                                                                                                                                                                                                                                     

In [37]: c = p(2,3)     p加括號傳參,調用lambda函數, 得到運算 2 * 3 結果 6                                                                                                                                                                                                                                                

In [38]: print(c)      打印結果c                                                                                                                                                                                                                                                   
6                      得到結果值6

匿名函數一般和python內置函數連用

example:
請按alist中元素的age由大到小排序

alist = [{'name':'a','age':20},{'name':'b','age':30},{'name':'c','age':25}]

def  sort_by_age(list1):
      return sorted(alist, key=lambda x : x['age'], reverse=True)

lambda 與內置函數filter連用

filter函數
filter函數用於過濾序列,過濾掉不符合條件的元素,返回一個迭代器對象,如果要轉換成列表,可以使用list()來轉換。
該接收兩個參數,第一個參數為函數,第二個參數為序列,序列的每個元素作為參數傳遞給函數進行判,然后返回True或者Flase
最后返回True的元素放到新的列表中
以下是filter方法的用法:
filter(function, iterable)

params:
function -- 判斷函數
iterable -- 可迭代對象
返回值 返回一個迭代器

for example:

def is_odd(n):
  return n % 2 == 1
tmplist = filter(is_odd, [1,2,3,4,5,6,7,8,9,10]
newlist = list(tmplist)
print(newlist)
輸出結果:
[1,3,5,7,9]

函數式編程與內置函數

a = [1,2,3,4,5,6]
b = filter(lambda x: x>5, a)
for i in b:
  print(i)

a = map(lambda x : x*2 ,[1,2,3])
print(list(a))

lambda函數

lambda表達式就是一個函數,可以賦值給一個變量,既然是表達式,可以參與運算。

lamnda x: x**2      

這個匿名函數的形參是x,表達式x**2的值就是這個函數的返回值

好處:

lambda只是一個表達式,函數體比def簡單的多。

lambda的主體是一個表達式,而不是一個代碼塊,僅僅能在lambda表達式中封裝有限的邏輯進去

lambda 表達式是起到一個函數快寫的作用,允許在代碼塊內嵌入一個函數的定義

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM