想必大家都知道匿名是什么含義,匿名就是指沒有名字,我們在寫程序的過程中有時不需要給函數(shù)命名,這時候就可以使用匿名函數(shù),我們在Python中使用lambda表達(dá)式來使用匿名函數(shù)。
1. 匿名函數(shù)的定義
我們通過一個例子來介紹一下lambda函數(shù)的簡單使用,變量m為我們輸入的值,我們需要采用匿名函數(shù)來返回m的平方和,也就是輸入2要返回值為4。
代碼如下:
m = int(input('請輸入一個數(shù)字:'))#m為輸入的值 a = lambda x : x * x #使用變量a來構(gòu)成一個表達(dá)式 print('返回值為:',a(m))
輸出結(jié)果為:
請輸入一個數(shù)字:6 返回值為: 36
我們通過下圖再來看一下它的結(jié)構(gòu):
下面再通過一個例子來使用一下匿名函數(shù):
m = int(input('請輸入一個數(shù)字:'))#m為輸入的值 a = lambda x : x + 10 * 10 + x * x print('返回值為:',a(m))
輸出結(jié)果為:
請輸入一個數(shù)字:5 返回值為: 130
通過上面兩個例子我們可以了解到lambda表達(dá)式等同于把函數(shù)壓縮為一行代碼,然后通過變量的定義直接來調(diào)用這個函數(shù),這種方式可以簡化我們的代碼。
2. 序列調(diào)用匿名方法
我們在序列中同樣可以使用匿名函數(shù),使用匿名函數(shù)可以幫助我們進(jìn)行很快的數(shù)據(jù)篩選,看下面的例子:
已知一個列表為[1,4,6,9,12,23,25,28,36,38,41,56,63,77,88,99],我們需要返回它里面的偶數(shù)并存放在列表當(dāng)中。
我們可以使用filter函數(shù)來進(jìn)行過濾。
代碼如下:
my_list = [1,4,6,9,12,23,25,28,36,38,41,56,63,77,88,99] print(list(filter(lambda x : x % 2 == 0,my_list)))
輸出結(jié)果為:
[4, 6, 12, 28, 36, 38, 56, 88]
我們從里到外依次來分析這個表達(dá)式,filter()函數(shù)中的對象前者為我們的篩選方式,后者為我們要篩選的對象,然后我們把這些數(shù)據(jù)使用list()函數(shù)存放在了列表當(dāng)中,最后打印出來,這種方式可以幫助我們很快的進(jìn)行數(shù)據(jù)的整合。
我們在進(jìn)行排序的時候也可以通過匿名函數(shù)來制定規(guī)則。
首先我們已知一組列表為[('元組甲',15,33),('元組乙',25,26),('元組丙',7,7)],列表中每個元素中的元組中包含每個元組的名字和最小值以及最大值,我們要根據(jù)每個人的元組最大值和最小值的差值來將列表進(jìn)行排序,看下面代碼:
my_list = [('元組甲',15,33),('元組乙',25,26),('元組丙',7,7)] my_list.sort(key=lambda x : x [2] - x[1])#使用key關(guān)鍵字來引入排序方式,排序方式根據(jù)第三個元素減去第二個元素的差值,對應(yīng)索引為2和1 print(my_list)
輸出結(jié)構(gòu)為:
[('元組丙', 7, 7), ('元組乙', 25, 26), ('元組甲', 15, 33)]
我們可以先簡單的計算一下,他們的差值分別為18、1、0,所以他們的排列順序應(yīng)該為丙、乙、甲,通過lambda表達(dá)式中的返回結(jié)果x[2]-x[1],我們獲得了他們的差值,然后根據(jù)差值進(jìn)行排序。
3. 總結(jié)
匿名函數(shù)在數(shù)據(jù)篩選的時候顯得尤為重要,它能夠很快的幫助我們來解決數(shù)據(jù)復(fù)雜繁瑣的問題,同時它可以優(yōu)化我們的代碼,使得代碼的整體更為簡潔,本章節(jié)我們就講到這里,下一節(jié)我們來學(xué)習(xí)函數(shù)中的三大基礎(chǔ)函數(shù)。
C語言網(wǎng)提供由在職研發(fā)工程師或ACM藍(lán)橋杯競賽優(yōu)秀選手錄制的視頻教程,并配有習(xí)題和答疑,點擊了解:
一點編程也不會寫的:零基礎(chǔ)C語言學(xué)練課程
解決困擾你多年的C語言疑難雜癥特性的C語言進(jìn)階課程
從零到寫出一個爬蟲的Python編程課程
只會語法寫不出代碼?手把手帶你寫100個編程真題的編程百練課程
信息學(xué)奧賽或C++選手的 必學(xué)C++課程
藍(lán)橋杯ACM、信息學(xué)奧賽的必學(xué)課程:算法競賽課入門課程
手把手講解近五年真題的藍(lán)橋杯輔導(dǎo)課程