更新時間:2022-09-01 來源:黑馬程序員 瀏覽量:
簡單來說,Python中的匿名函數(shù)就是沒有名稱的函數(shù),也就是不再使用def定義的函數(shù)。如果要聲明匿名函數(shù),則需要使用lambda關(guān)鍵字,匿名函數(shù)的聲明格式如下:
lambda 參數(shù)列表:表達式
定義好的匿名函數(shù)不能直接使用,最好使用一個變量保存它,以便后期可以隨時使用這個函數(shù)。下面是定義和調(diào)用匿名函數(shù)的示例代碼,具體如下。
add = lambda a, b: a+b # 調(diào)用add函數(shù) print("運行結(jié)果:", add(10, 20)) print("運行結(jié)果:", add(20, 20))
運行結(jié)果如圖6-20所示。
圖6-20 運行結(jié)果
需要注意的是,使用lambda聲明的匿名函數(shù)能接收任何數(shù)量的參數(shù),但只能返回一個表達式的值。此外,由于匿名函數(shù)的函數(shù)體只是一個表達式,它不能直接使用print()函數(shù)。
在某些場景下,匿名函數(shù)非常有用。假設(shè)之前我們要對兩個數(shù)進行運算,如果希望聲明的函數(shù)支持所有的運算,可以將匿名函數(shù)作為函數(shù)參數(shù)傳遞。接下來,通過一個案例來演示,如例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)
運行結(jié)果如圖6-21所示。
圖6-21 運行結(jié)果
注意:
與使用def定義的普通函數(shù)相比,使用lambda定義的匿名函數(shù)有很多不同的地方。
(1)普通函數(shù)在定義時是有名稱的,而匿名函數(shù)沒有函數(shù)名稱,這是最明顯的區(qū)別之一。
(2)普通函數(shù)的函數(shù)體中可以包含多條語句,而匿名函數(shù)的函數(shù)體中只有一個表達式,要簡單很多。
(3)普通函數(shù)的函數(shù)體中可以使用if、for等語句,而匿名函數(shù)中不可以使用。
(4)普通函數(shù)一般用于實現(xiàn)復(fù)雜的功能,而匿名函數(shù)只能實現(xiàn)簡單的功能。
(5)普通函數(shù)可以被其它程序調(diào)用,而匿名函數(shù)不能共享給其它程序使用。