匿名函數lambda:是指一類無需定義標識符(函數名)的函數或子程式。lambda 函數可以接收任意多個參數 (包括可選參數) 並且返回單個表達式的值。語法為lambda [arg1 [,arg2,.....argn]]:expression 冒號前是參數,可以有多個,用逗號隔開,冒號右邊的為表達... ...
匿名函數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))