李丹 陜西工業(yè)職業(yè)技術(shù)學(xué)院 信息工程學(xué)院
關(guān)鍵字:Python 匿名函數(shù) 應(yīng)用
在Python中,當(dāng)需要定義一個(gè)功能簡(jiǎn)單且只有一個(gè)表達(dá)式時(shí),可以省去函數(shù)命名的過(guò)程,而將此函數(shù)定義為匿名函數(shù),同時(shí)也可以避免定義函數(shù)的過(guò)程中存在函數(shù)名重復(fù)的問(wèn)題。本文討論匿名函數(shù)的定義與調(diào)用,舉例說(shuō)明其應(yīng)用。
(1)匿名函數(shù)的定義
匿名函數(shù),顧明思議就是沒(méi)有名字的函數(shù),即不需要通過(guò)關(guān)鍵字def定義的函數(shù)。Python中,定義匿名函數(shù)使用關(guān)鍵字lambda,其一般格式為:
其中,冒號(hào)后面表達(dá)式的值作為匿名函數(shù)的返回值。
注:①參數(shù)列表中的參數(shù)可以是多個(gè),并且參數(shù)之間用逗號(hào)進(jìn)行分隔;
②表達(dá)式只能是一個(gè)表達(dá)式,即只能有一個(gè)返回值。
(2)匿名函數(shù)的調(diào)用
匿名函數(shù)一般不能直接使用,而是需要將其賦給一個(gè)變量,通過(guò)變量名(實(shí)參列表)來(lái)調(diào)用匿名函數(shù)。
注:實(shí)參列表中參數(shù)之間用逗號(hào)進(jìn)行分隔,依次和參數(shù)列表中的參數(shù)從左往右一一對(duì)應(yīng)。
例1:通過(guò)定義函數(shù)求10與2之差。
方法1:定義匿名函數(shù)實(shí)現(xiàn),代碼如下:
方法2:通過(guò)def定義函數(shù)實(shí)現(xiàn),代碼如下:
在Pycharm中運(yùn)行這兩個(gè)程序,最終結(jié)果都是8
從此例子中可以看出:對(duì)于同一問(wèn)題,匿名函數(shù)比def定義的函數(shù)代碼量少,更簡(jiǎn)單且更易理解。
(3)匿名函數(shù)和一般函數(shù)的區(qū)別
與通過(guò)def定義的函數(shù)相比,匿名函數(shù)有以下不同之處:
①匿名函數(shù)沒(méi)有函數(shù)名,但是def定義的函數(shù)有函數(shù)名;
②匿名函數(shù)中只能有一個(gè)表達(dá)式,但是def定義的函數(shù)可以有多條語(yǔ)句;
③匿名函數(shù)中不可以使用選擇和循環(huán)語(yǔ)句,但是def定義的函數(shù)可以;
④匿名函數(shù)直接返回表達(dá)式的值而不需要寫return語(yǔ)句,但是def定義的函數(shù)要有返回值,則必須要用return語(yǔ)句;
⑤匿名函數(shù)只能處理簡(jiǎn)單問(wèn)題,復(fù)雜問(wèn)題還需通過(guò)def定義函數(shù)實(shí)現(xiàn)。
在某些情況下,匿名函數(shù)處理問(wèn)題非常有效。下面列舉匿名函數(shù)的一些應(yīng)用。
(1)匿名函數(shù)作為方法的參數(shù)
例2:將1-10之間每個(gè)元素的平方依次放在同一列表中。
代碼如下:
在Pycharm中運(yùn)行程序后,其結(jié)果是:
說(shuō)明:① 此例子將匿名函數(shù)作為append()方法的一個(gè)參數(shù),調(diào)用匿名函數(shù)依次計(jì)算出循環(huán)變量i的平方,并依次追加在列表list_1之后;
② 若用def定義的函數(shù)來(lái)實(shí)現(xiàn),則需要定義一個(gè)函數(shù),其代碼量比匿名函數(shù)多。
(2)匿名函數(shù)作為函數(shù)的實(shí)參
在Pycharm中運(yùn)行程序后,其結(jié)果是:
說(shuō)明:① 此例子在匿名函數(shù)中定義兩個(gè)數(shù)進(jìn)行的運(yùn)算,并將其作為實(shí)參傳遞給形參,從而實(shí)現(xiàn)兩個(gè)數(shù)的所有運(yùn)算,其他運(yùn)算可以用相類似的方法解決;
②若此問(wèn)題用def定義的函數(shù)來(lái)解決,則需要定義三個(gè)函數(shù)來(lái)實(shí)現(xiàn),可以看出匿名函數(shù)比def定義的函數(shù)的代碼量少。
(3)匿名函數(shù)作為內(nèi)置函數(shù)的參數(shù)
例4:通過(guò)匿名函數(shù)實(shí)現(xiàn)對(duì)列表中元素的排序。
代碼如下:
在Pycharm中運(yùn)行程序后,其結(jié)果是:
說(shuō)明:① 匿名函數(shù)作為sort函數(shù)中key參數(shù)所對(duì)應(yīng)的值,實(shí)現(xiàn)對(duì)列表中元素按照指定規(guī)則進(jìn)行排序,其中l(wèi)ambda定義的匿名函數(shù)中的參數(shù)x表示列表中的一個(gè)元素,x['name']表示每個(gè)元素按照name進(jìn)行排序,同理,x[‘a(chǎn)ge’]表示每個(gè)元素按照age進(jìn)行排序;
② 此問(wèn)題很難用def定義的函數(shù)實(shí)現(xiàn)。
本文通過(guò)介紹Python中匿名函數(shù)的定義與調(diào)用,并舉例詳細(xì)說(shuō)明了三個(gè)方面的應(yīng)用,可以看出匿名函數(shù)在解決某些問(wèn)題時(shí),更方便、更簡(jiǎn)潔、更易懂且代碼量更少。