全國(guó)咨詢(xún)/投訴熱線:400-618-4000

首頁(yè)技術(shù)文章正文

Python培訓(xùn):匿名函數(shù)與普通函數(shù)相比的區(qū)別

更新時(shí)間:2022-09-01 來(lái)源:黑馬程序員 瀏覽量:

  簡(jiǎn)單來(lái)說(shuō),Python中的匿名函數(shù)就是沒(méi)有名稱(chēng)的函數(shù),也就是不再使用def定義的函數(shù)。如果要聲明匿名函數(shù),則需要使用lambda關(guān)鍵字,匿名函數(shù)的聲明格式如下:

lambda 參數(shù)列表:表達(dá)式

  定義好的匿名函數(shù)不能直接使用,最好使用一個(gè)變量保存它,以便后期可以隨時(shí)使用這個(gè)函數(shù)。下面是定義和調(diào)用匿名函數(shù)的示例代碼,具體如下。

add = lambda a, b: a+b
# 調(diào)用add函數(shù)
print("運(yùn)行結(jié)果:", add(10, 20))
print("運(yùn)行結(jié)果:", add(20, 20))

  運(yùn)行結(jié)果如圖6-20所示。

1661996969859_匿名函數(shù)運(yùn)行結(jié)果1.jpg

  圖6-20 運(yùn)行結(jié)果

  需要注意的是,使用lambda聲明的匿名函數(shù)能接收任何數(shù)量的參數(shù),但只能返回一個(gè)表達(dá)式的值。此外,由于匿名函數(shù)的函數(shù)體只是一個(gè)表達(dá)式,它不能直接使用print()函數(shù)。

  在某些場(chǎng)景下,匿名函數(shù)非常有用。假設(shè)之前我們要對(duì)兩個(gè)數(shù)進(jìn)行運(yùn)算,如果希望聲明的函數(shù)支持所有的運(yùn)算,可以將匿名函數(shù)作為函數(shù)參數(shù)傳遞。接下來(lái),通過(guò)一個(gè)案例來(lái)演示,如例6-11所示。

  例6-11 匿名函數(shù)-1

def func(a, b, operation):
    print("a=%d"%a)
    print("b=%d"%b)
    print("result=", operation(a,b))
func(11, 22, lambda x, y:x +y)
print("-------------------")
func(11, 22, lambda x, y:x - y)

  運(yùn)行結(jié)果如圖6-21所示。

1661997670833_匿名函數(shù)運(yùn)行結(jié)果2.jpg

  圖6-21 運(yùn)行結(jié)果

  注意:

  與使用def定義的普通函數(shù)相比,使用lambda定義的匿名函數(shù)有很多不同的地方。

  (1)普通函數(shù)在定義時(shí)是有名稱(chēng)的,而匿名函數(shù)沒(méi)有函數(shù)名稱(chēng),這是最明顯的區(qū)別之一。

  (2)普通函數(shù)的函數(shù)體中可以包含多條語(yǔ)句,而匿名函數(shù)的函數(shù)體中只有一個(gè)表達(dá)式,要簡(jiǎn)單很多。

  (3)普通函數(shù)的函數(shù)體中可以使用if、for等語(yǔ)句,而匿名函數(shù)中不可以使用。

  (4)普通函數(shù)一般用于實(shí)現(xiàn)復(fù)雜的功能,而匿名函數(shù)只能實(shí)現(xiàn)簡(jiǎn)單的功能。

  (5)普通函數(shù)可以被其它程序調(diào)用,而匿名函數(shù)不能共享給其它程序使用。

分享到:
在線咨詢(xún) 我要報(bào)名
和我們?cè)诰€交談!