在python中有個匿名函式特性非常的便捷和有用,用關鍵字lambda就可以宣告乙個匿名函式,所以很多時候直接稱呼為lambda函式。
每次介紹新特性的時候,我們都要反問什麼是lambda函式呢?因為又叫匿名函式,所以是指沒有宣告函式名稱的函式,它和平時我們定義普通函式使用def關鍵字不同,
lamda函式的宣告語法如下:
lambda argument_list: expression
其中,lambda是python預留的關鍵字,argument_list和expression由使用者自定義,中間用冒號 『』:』』 間隔。這裡面argument_list是引數列表,它的結構與python中定義普通函式時的引數列表是一樣的。而這裡的expression是乙個關於引數的表示式。表示式**現的引數需要在argument_list中有定義,並且表示式只能是單行的。
看下實際使用例子:
argument_list可以有非常多的形式,如下的4個例子都是可以的,方法1例子中使用了a, b
變數引數,方法2例子中用a=1, b=2
設定預設值引數,方法3例子中用*args*
位置引數,方法4例子中用**kwargs
關鍵字引數來作為lambda函式的引數傳遞方式都是可以的。expression表示式裡我們分別對應argument_list裡接收的引數做了各自的表示式處理。
func1 =
lambda a, b: a + b
print
(f'func1: '
)func2 =
lambda a=
1, b=
2: a *
2print
(f'func2: '
)func3 =
lambda
*args:
[arg *
2for arg in args]
print
(f'func3: '
)func4 =
lambda
**kwargs:
[kwargs[key]*2
for key in kwargs]
print
(f'func4: '
)# 輸出如下:
# func1: 3
# func2: 2
# func3: [6, 4]
# func4: [6, 4]
lambda多種用法
由於lambda的語法是固定的,所以本質上使用的用法也就是固定的,但是在不同的場景中可以擴充套件,比如有如下幾種場景。
lambda_func =
lambda a, b: a + b
print
(f'lambda_func: '
)# 輸出如下:
# lambda_func: 3
def
add_number
(x):
return
(lambda y: x+y)
a = add_number(1)
print
(type
(a))
print
(a(3))
# 輸出如下:
# # 4
map_result =
map(
lambda x:
abs(x),[
-1,2
,-3,
4,-5
])print
(f'map_result: '
)from functools import
reduce
reduce_result =
reduce
(lambda x,y: x+y,[1
,3,5
,7,9
])print
(f'reduce_result: '
)# 輸出如下:
# map_result: [1, 2, 3, 4, 5]
# reduce_result: 25
在lambda中也可以直接使用if - else語句來做表示式判斷,這個判斷表示式編寫的方式其實就相當於其它語言裡的三元運算子,但是盡量不要編寫過於複雜的判斷,畢竟這樣增加了**的閱讀難度。
f =
lambda x:
1if x==
"a"else
"none"
print
(f("a"))
# 輸出如下:
# 1
可以直接將lambda函式傳入的變數引數x,以字典取值的方式取出對應的值。
str_dict =
f =lambda x: str_dict[x]
print
(f("b"))
# 輸出如下:
# 2
lambda匿名函式
匿名函式 lambda函式是一種快速定義單行的最小函式,是從lisp借用來的,可以用在任何需要函式的地方。def f x,y return x y g lambda x,y x y g 2,3 優點 1 使用python寫一些執行的指令碼時,使用lambda可以省去定義函式的過程,讓 更精簡 2 對...
lambda匿名函式
lambda語句中,冒號前argumes是引數,可以有多個,可以用逗號隔開或其他形式,冒號右邊的是表示式,並將其結果返回。示例 f lambda x,y x y print f 2,3 6myadd lambda args sum args result myadd 1,3,4 print resu...
lambda匿名函式
lambda 函式用於建立匿名函式。匿名函式就是沒有名稱的函式,也就是不再使用def語句定義的函式。lambda 函式語法格式如下 lambda args1 args2,argn expression 說明 def和lambda函式的對比總結 def建立的函式是有名稱的,而lambda沒有函式名稱,...