Python之lambda 函式理解
匿名函式lambda:是指一類無需定義識別符號(函式名)的函式或子程式。
lambda 函式可以接收任意多個引數 (包括可選引數) 並且返回單個表示式的值。
語法:
lambda [arg1 [,arg2,.....argn]]:expression
冒號前是引數,可以有多個,用逗號隔開,冒號右邊的為表示式(只能為一個)。其實lambda返回值是一個函式的地址,也就是函式物件。
舉例:
1.將lambda函式賦值給一個變數,通過這個變數間接呼叫該lambda函式。
def sum(x,y):
return x+y
print(sum(1,2))
使用lambda函式:
sum = lambda x,y : x+y
print(sum(1,2))
2.將lambda函式作為引數傳遞給其他函式。部分Python內建函式接收函式作為引數。
def odd(x):
return x%2
temp = range(10)
show = filter(odd,temp)
print(list(show)) #[1, 3, 5, 7, 9]
使用lambda函式:
print(list(filter(lambda x: x%2,range(10)))) #[1, 3, 5, 7, 9]
此時lambda函式用於指定過濾列表元素的條件。
再比如:
map(lambda x: x+1, [1, 2,3]) #[2, 3, 4]
此時lambda函式用於指定對列表中每一個元素的共同操作。
另外還有:sorted()、map()
3.將lambda函式作為其他函式的返回值,返回給呼叫者。
函式的返回值也可以是函式。例如return lambda x, y: x+y返回一個加法函式。這時,lambda函式實際上是定義在某個函式內部的函式,稱之為巢狀函式,或者內部函式。對應的,將包含巢狀函式的函式稱之為外部函式。內部函式能夠訪問外部函式的區域性變數,這個特性是閉包(Closure)程式設計的基礎。
4.將lambda函式賦值給其他函式,從而將其他函式用該lambda函式替換。
例如,為了把標準庫time中的函式sleep的功能遮蔽(Mock),我們可以在程式初始化時呼叫:time.sleep=lambda x:None。這樣,在後續程式碼中呼叫time庫的sleep函式將不會執行原有的功能。例如,執行time.sleep(3)時,程式不會休眠3秒鐘,而是什麼都不做
5.將if...else語句縮減為單一的條件表示式,
語法為:expression1 if A else expression2
如果A為True,條件表示式的結果為expression1,否則為expression2
def s(x):
if x==1:
return "yes"
else:
return "no"
print(s(0))
print(s(1))
使用lambda函式:
s=lambda x:"yes" if x==1 else "no"
print(s(0))
print(s(1))
更多Python相關資訊見 Python 專題頁面 https://www.linuxidc.com/topicnews.aspx?tid=17
Linux公社的RSS地址 : https://www.linuxidc.com/rssFeed.aspx
本文永久更新連結地址: https://www.linuxidc.com/Linux/2019-03/157837.htm